IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi .NET Discussion :

Problèmes pour faire cohabiter 2d et 3d dans mon application dotnet!


Sujet :

Delphi .NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Problèmes pour faire cohabiter 2d et 3d dans mon application dotnet!
    Boujour amis développeurs! ^^
    Voici la suite d'un problème que j'ai déjà expliqué ici. Mon but : créer un moteur 2D cohabitant avec le moteur 3D avec delphi 2009, en dotnet et avec directx 9. Finalement j'ai réussi à utiliser Directdraw mais là, gros problème, le device de directdraw n'est pas le même que le device de direct3d, ce qui fait que bien que les moteurs 2d et 3d marchent très bien tout seuls, je ne suis pas parvenu à les faire fonctionner ensemble...

    J'aimerais donc savoir s'il est possible de faire cohabiter 2d et 3d avec directdraw/direct3d (directgraphics n'existant pas tel quel en dotnet...), si oui comment, sinon avez-vous des liens ou des conseils pour le faire avec direct3d (autres que la foire aux questions)?

    Merci d'avance! <Le temps m'est compté>

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    et bien je te dirais bien de rester en 3D

    je bosse actuellement sur une interface OpenGL...il y a une partie 3D et pour ce qui est de la 2D c'est tout simplement de la 3D en projection orthogonale

    1) activation du ZBuffer, rotations, translations, etc...
    2) rendu 3D
    3) désactivation du ZBuffer, reset de la matrice de projection en orthogonal
    4) rendu 2D
    5) SwapBuffers (comme le swap des surfaces sous DirectX)

    je n'ai pas utilisé DirectX depuis fort longtemps, mais tu dois pouvoir faire cela également

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci!
    C'est en effet ce que je comptais faire vu que la voie de directdraw semble également bouchée...
    Pour la désactivation du zbuffer juste après la gestion 3d, pas de problème, en plus vu que le device 3d sera juste passé en argument il n'y aura pas de problème,

    [d'ailleurs juste comme ça en delphi on fait comment pour faire

    constructor classB.create (objetA : classA);
    begin
    objetB:=objetA
    end;

    ]

    mais pour la projection orthogonale et la gestion 2d ensuite, je vois pas trop comment faire... De la même façon qu'avec la 3d, avec des triangles?
    En gros si je comprends bien l'image sera mise à plat et qu'un point soit éloigné de 1 ou de 100, ce sera la même chose...

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Adryazz Voir le message
    Merci!
    C'est en effet ce que je comptais faire vu que la voie de directdraw semble également bouchée...
    sans compter que DirectDraw est super limité, pas de blending, etc...me semble-t-il.

    >d'ailleurs juste comme ça en delphi on fait comment pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    constructor classB.create (objetA : classA);
    begin
    objetB.prop1:=objetA.prop1;
    objetB.prop2:=objetA.prop2;
    ...
    end;
    ]

    Citation Envoyé par Adryazz Voir le message
    mais pour la projection orthogonale et la gestion 2d ensuite, je vois pas trop comment faire... De la même façon qu'avec la 3d, avec des triangles?
    En gros si je comprends bien l'image sera mise à plat et qu'un point soit éloigné de 1 ou de 100, ce sera la même chose...
    sous OpenGL c'est prévu (glOrtho) je ne sais pas s'il y a l'équivalent sous DX, mais en gros il faut une matrice de projection qui ne tient pas compte de Z

    peut-être

  5. #5
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Si tu veux faire du 2D et 3D en même temps, il faut t'interesser à WPF.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci et désolé de ne pas avoir répondu avant (on va dire que j'étais en période de programmation intensive puis en repos. ^^'). Finalement j'ai utilisé le sprite de direct3d pour les images et le font pour le texte qui sont très pratiques et très simples à utiliser.

    constructor classB.create (objetA : classA);
    begin
    objetB.prop1:=objetA.prop1;
    objetB.prop2:=objetA.prop2;
    ...
    end;
    Le problème est justement là, lorsque mon objet à une cinquantaine de propriétés, de fonctions, ... (device de direct3d par exemple) comment l'initialiser en une fois? Sinon pour le reste c'est résolu (j'attends juste cette réponse pour le marquer).

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Adryazz Voir le message
    Le problème est justement là, lorsque mon objet à une cinquantaine de propriétés, de fonctions, ... (device de direct3d par exemple) comment l'initialiser en une fois? Sinon pour le reste c'est résolu (j'attends juste cette réponse pour le marquer).
    il n'y a pas de solution miracle mais tu peux lire ce thread

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci, merci beaucoup mais ce n'est hélas toujours pas ça!...


    En fait je l'ai mal écrit, voilà plutôt ce que je tente de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    interface 
     
    type
     
    classeP = class
     
       objetB : classA;
     
       constructor create (objetA : classA);
       procedure test1;
       procedure test2(para1 : type1);
       ...
      function testn(para3 : type3) : type2;
     
    end;
     
     
     
    implementation
     
    constructor classeP.create (objetA : classA);
     begin
       inherited create;
       objetB.prop1:=objetA.prop1;
       objetB.prop2:=objetA.prop2;
       ...
     end;
     
    procedure test1;
     
     var
     lala : typelala
     
     begin
       lala := objetB.ggg
       while lala>gg do
         ...
     
     end;
     
     ...
     
    end.
    En fait, je n'ai pas envie de passer mon objet en paramètre pour chaque fonction. J'aimerais bien le créer une bonne fois pour toute avec mon constructeur et puis l'utiliser proprement. En fait l'objet en question est dans mon cas le device de direct3d (dotnet) qui représente l'écran et normalement il ne change pas en cours de route...

    Est-ce que mon problème est clair? Sinon je peux encore tenter de reformuler... Celui qui vous vient en aide est le roi!

    Merci encore!

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    hum...non j'ai peur de ne pas tout saisir

    mais je vais tenter une réponse tout de même

    sous Delphi, tous les objets sont des pointeurs, donc il suffit de déclarer un membre classA et de le stocker pour une usage ultérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    type
     classeP = class
        objetB : classA;
        constructor create (objetA : classA);
        procedure test1;
     end;
     
    constructor classeP.create (objetA : classA);
    begin
      objetB := objetA; // conserve l'adresse de l'instance objetA
    end;
     
    procedure classeP.test1;
    begin
      if objetB.Property... // fait référence à l'instance objetA du constructeur
    end;

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    C'est bon, enfin normalement! ^^'
    En fait au moment où j'appelais mon objet celui était encore nul d'où quelques problèmes de compréhension entre moi et delphi!
    Merci beaucoup d'avoir passé un peu de temps sur mes problèmes!
    Problèmes résolus. -> http://ldk.it.free.fr/

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Sans vouloir être désagréable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'LDK.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'
    'LDK.exe' (Managed): Loaded 'C:\Documents and Settings\xxx\Desktop\legendes_de_kantalica_s2\legendes_de_kantalica_s2\Executable\LDK.exe'
    'LDK.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'
    'LDK.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll'
    An unhandled exception of type 'System.TypeInitializationException' occurred in Unknown Module.
     
    Additional information: The type initializer for 'LDK.Units.LDK' threw an exception.
     
    The program '[1544] LDK.exe: Managed' has exited with code -532459699 (0xe0434f4d).

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Vous avez eu ça en lançant l'exécutable?
    C'est bizarre car plusieurs personnes l'ont déjà téléchargé et ils n'ont pas eu de problème... Vous avez Directx 9 sur votre ordinateur? Si oui, je demanderai, en tant que chef de projet ^^', à celui qui est chargé de la réalisation du site s'il a changé l'exécutable... Sinon de toute façon l'exécutable sera bientôt remplacé par une version plus récente avec l'éditeur de niveaux, les premiers éléments de gameplay, et les premières animations.
    Mais votre problème m'intrigue... C'est vraiment bizarre... Si d'autres personnes ont des problèmes qu'ils n'hésitent pas à me contacter sur ce site ou dans la section contact de LDK. Merci! Bonne soirée!



    EDIT : j'ai téléchargé la dernière version téléchargeable sur le site et tout marche niquel... Euh vous avez décompressé le zip? ^^' Moi je dis ça je dis rien...

  13. #13
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    farpaitement ça plante !

    Operating System: Windows XP Professional (5.1, Build 2600) Service Pack 3 (2600.xpsp_sp3_gdr.080814-1236)
    System Model: Dell DXP051
    DirectX Version: DirectX 9.0c (4.09.0000.0904)
    Card name: NVIDIA GeForce 7300 LE

    PS: mon bosse me reproche d'avoir choisi OpenGL qui lui semble moins fiable ^^

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut


    Vous avez Directx 9...
    Parce que pour l'instant il n'y avait qu'un seul endroit au monde où ça ne marchait pas : à l'EPITA! Car allez savoir pourquoi directx n'est pas installé sur les machines... Mais là, je vois pas! Et ça ne marche pas sur TOUS vos ordinateurs? C'est le directx 10 qui n'est pas compatible avec les autres si ma mémoire est bonne, pas le 9... Peut-être est-ce la version dotnet qui fait des siennes... Plusieurs possibilités mais hélas aucune réponse! ^^'


    PS: mon bosse me reproche d'avoir choisi OpenGL qui lui semble moins fiable ^^
    Mais non, c'est super fiable...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2011, 11h54
  2. Réponses: 5
    Dernier message: 07/12/2010, 21h49
  3. Faire une aide en ligne dans mon application
    Par Siguillaume dans le forum Débuter
    Réponses: 2
    Dernier message: 05/09/2008, 21h16
  4. [VBA-E] Problème pour faire une boucle dans une userform
    Par Garlim dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/05/2007, 00h10
  5. Réponses: 4
    Dernier message: 09/02/2006, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo