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

DirectX Discussion :

Primitives qui ne s'affichent pas


Sujet :

DirectX

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Primitives qui ne s'affichent pas
    Bonjour à tous!

    J'ai un problème qui doit être assez basique, mais que je n'arrive pas à résoudre : je n'arrive pas à afficher des primitives.
    L'initialisation de DirectX (9) dans mon programme me semble bonne, de plus, je peux afficher du texte (avec ID3DXFont) et des lignes (avec LPD3DXLINE). Mais les primitives, pas moyen!!

    Voici mon code pour afficher un rectangle :


    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
     
     
    m_pd3dDevice->BeginScene();
     
     
    DWORD c = D3DCOLOR_ARGB(255,255,0,0);
     
    VERTEX p0 = {100.0f,100.0f,1.0f,1.0f,c};
    VERTEX p1 = {100.0f,200.0f,1.0f,1.0f,};
    VERTEX p2 = {200.0f,200.0f,1.0f,1.0f,c};
    VERTEX p3 = {200.0f,100.0f,1.0f,1.0f,c};
     
    HRESULT hr;
    VERTEX obj[4]={p0,p1,p3,p2}; 
    hr = m_pd3dDevice->CreateVertexBuffer(4*mVSize,0,mVfmt,D3DPOOL_DEFAULT,&mVertexBuffer,NULL); 
     
    void *ptr; 
    hr = mVertexBuffer->Lock(0,4*mVSize,&ptr,0);
     
    memcpy(ptr,obj,4*mVSize);  
    hr = mVertexBuffer->Unlock();
     
    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); 
     
    hr = m_pd3dDevice->SetFVF(mVfmt); 
     
    hr = m_pd3dDevice->SetStreamSource(0,mVertexBuffer,0,mVSize); 
     
    hr = m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);   
     
    if(mVertexBuffer)
    {
    	hr = mVertexBuffer->Release();
    	mVertexBuffer=NULL;
    }
     
    m_pd3dDevice->EndScene();
     
    m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    Et la structure de mes vertex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
    	float x, y, z;
    	float rhw;  
    	DWORD color;        
    } VERTEX;


    J'ai essayé les autres types de primitive, je n'ai pas de résultat non plus.
    Pouvez vous me dire si vous voyez un probleme dans mon code?

    Sinon, que pourrait il manquer à l'initialisation par exemple, sachant que je peux afficher du texte et des lignes?

    Merci d'avance!

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    mVSize est initialisé ou ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VERTEX p1 = {100.0f,200.0f,1.0f,1.0f,};
    Il manque "c"

    J'ai lu ton code en diagonale, et je n’ai pas mon code Direct3D pour check...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci d'avoir jeté un oeil !

    Le "c" qu"il manque c'est seulement un erreur de copie, il était dans mon code.

    Le mVsize est initialisé plus haut ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mVSize = sizeof(VERTEX);

    J'ai regardé plein de tuto, mon code me semble bon, je me demande qu'est ce qui peut faire que les VertexBuffer ne fonctionne pas, alors que le reste s'affiche correctement...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Déjà tu devrais éviter de créer / remplir / détruire ton vertex buffer à chaque tour de boucle. Je pense même que ton VB est encore utilisé après l'appel à DrawPrimitives, mais si ça ne crash pas c'est que le driver et/ou DirectX sont suffisamment intelligents (ou que je me trompe).

    Ensuite il y a une Q/R dans la FAQ intitulée "j'ai un problème ! que faire ?", tu peux commencer par là.

    Ensuite vérifie tes états / matrices (bien souvent c'est le culling qui fait tout foirer). Parfois les choses s'affichent mais on ne les voit simplement pas.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci de tes conseils.

    En fait j'avais déjà regardé la partie "j'ai un problème" de la FAQ, mes méthodes ne renvoient pas de code d'erreur, le reference rasterizer ne donne rien de plus, et j'ai bien sûr cherché sur le net.

    Quant au culling, je l'ai désactivé...

    Je pense même que ton VB est encore utilisé après l'appel à DrawPrimitives
    Je ne comprend pas trop ce que tu veux dire par là?
    Toujours est-il que je viens d'essayer de faire le release sur le vertex buffer plus tard, et cela ne change rien.


    Auriez-vous d'autres pistes?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    Salut,

    Il y a des chances si tu n'initialises pas ta matrice transform (et les deux autres) que ça t'affiche n'importe quoi.

    Donc si tu ne l'as pas déjà fais plus haut je rajouterais ça quelque part à l'initialisation:

    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
     
    // Matrice transform (d'habitude on la set dans le render mais la ta scene bouge pas)
    D3DXMATRIX matIdent;
    D3DXMatrixIdentity(&matIdent);
    tondevice->SetTransform ( D3DTS_WORLD, & matIdent ) ;
     
    // Matrice de vue ( en fonction des partie ducube que tu veux voir)
    D3DXMATRIX matView;
    D3DXVECTOR3 vEye = D3DXVECTOR( 150, 150, 100 );
    D3DXVECTOR3 vLookatPt = D3DXVECTOR( 150,150,1 );
    D3DXVECTOR3 vUp = D3DXVECTOR( 0 , 1 , 0 );
     
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUp );
    tondevice->SetTransform ( D3DTS_VIEW, & matView ) ;
     
    // Matrice de proj ( initialisation normale )
    D3DXMATRIX matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1, 1, 500 );
    tondevice->SetTransform ( D3DTS_PROJECTION, & matProj ) ;
    ça reste des valeurs de test qui semblent adaptés à tes vertices actuels après a toi de changer les valeurs selon tes besoins...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    En effet je n'avais pas initialisé les matrices, cela ne me semblait pas nécéssaire étant donné que je ne fais que de la 2D.
    Ceci dit, j'ai rajouté ton code, j'ai essayé de modifier les paramètres, et je ne vois toujours pas mon malheureux cube.
    Merci quand même...

    Pas de culling, pas de lumières, je suis bien dans la fenetre...
    Et meme sans initialisation, le "monde" a l'air correct : je dessine mon texte sur des sprite, et je peux les placer dans ma fenetre sans problème.

  8. #8
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par clairouch
    En effet je n'avais pas initialisé les matrices, cela ne me semblait pas nécéssaire étant donné que je ne fais que de la 2D.
    Ceci dit, j'ai rajouté ton code, j'ai essayé de modifier les paramètres, et je ne vois toujours pas mon malheureux cube.
    Merci quand même...

    Pas de culling, pas de lumières, je suis bien dans la fenetre...
    Et meme sans initialisation, le "monde" a l'air correct : je dessine mon texte sur des sprite, et je peux les placer dans ma fenetre sans problème.
    Essaie de lire la documentation, en général c'est plutot utile. notamment la partie qui traite des transformations.

    Il faut que tu saches : de quel espace tu pars, dans quel espace tu arrives, quelles sont les conventions etc.

    Bref le B.A.BA qui est couvert par la doc de manière très complète.

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

Discussions similaires

  1. [HTML]Image qui ne s'affiche pas sous firefox...
    Par OrangeBud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/10/2004, 13h42
  2. pages qui ne s'affichent pas
    Par luck dans le forum ASP
    Réponses: 4
    Dernier message: 19/07/2004, 11h35
  3. [Applet] BorderLayout qui ne s'affiche pas
    Par Invité(e) dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/04/2004, 11h39
  4. [debutant][Tomcat]Images qui ne s'affichent pas
    Par omega dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2004, 09h44
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30

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