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 :

DrawIndexedPrimitive marche po :(


Sujet :

DirectX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut DrawIndexedPrimitive marche po :(
    Bonjour, je n'arrive pas à faire fonctionner DrawIndexedPrimitive, voila mon code:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    	HRESULT H=m_pd3dDevice->CreateVertexBuffer( 8*sizeof(CUSTOMVERTEX),
                                          D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX,
                                          D3DPOOL_MANAGED, &objetVB ,NULL);
     
    	m_pd3dDevice->CreateIndexBuffer( 36*sizeof(DWORD),
                                          D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,
                                          D3DPOOL_MANAGED, &objetIB ,NULL);
     
    	CUSTOMVERTEX* LVert;
    	DWORD* LInd;
    	objetVB->Lock( 0, 0, (void**)&LVert, 0 );
    	objetIB->Lock( 0, 0, (void**)&LInd, 0 );
     
    	LVert[0].position=D3DXVECTOR3(-1,0,-1);
    	LVert[1].position=D3DXVECTOR3(-1,0,1);
    	LVert[2].position=D3DXVECTOR3(1,0,-1);
    	LVert[3].position=D3DXVECTOR3(1,0,1);
    	LVert[4].position=D3DXVECTOR3(-1,2,-1);
    	LVert[5].position=D3DXVECTOR3(-1,2,1);
    	LVert[6].position=D3DXVECTOR3(1,2,-1);
    	LVert[7].position=D3DXVECTOR3(1,2,1);
     
    	LInd[0]=0;
    	LInd[1]=2;
    	LInd[2]=1;
    	LInd[3]=1;
    	LInd[4]=2;
    	LInd[5]=3;
    	LInd[6]=4;
    	LInd[7]=5;
    	LInd[8]=6;
    	LInd[9]=5;
    	LInd[10]=7;
    	LInd[11]=6;
    	LInd[12]=0;
    	LInd[13]=1;
    	LInd[14]=4;
    	LInd[15]=1;
    	LInd[16]=5;
    	LInd[17]=4;
    	LInd[18]=1;
    	LInd[19]=3;
    	LInd[20]=5;
    	LInd[21]=3;
    	LInd[22]=7;
    	LInd[23]=5;
    	LInd[24]=3;
    	LInd[25]=2;
    	LInd[26]=7;
    	LInd[27]=2;
    	LInd[28]=6;
    	LInd[29]=7;
    	LInd[30]=2;
    	LInd[31]=0;
    	LInd[32]=4;
    	LInd[33]=4;
    	LInd[34]=6;
    	LInd[35]=2;
     
     
    	objetIB->Unlock();
    	objetVB->Unlock();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    			m_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    			m_pd3dDevice->SetIndices(objetIB);
    			m_pd3dDevice->SetStreamSource( 0, objetVB, 0,  sizeof(CUSTOMVERTEX) );
     
    			m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0,0,36,0,12 );    //aussi essayé avec 8 au lieu de 36
    Voila j'ai que des S_OK, mais ca n'affiche rien.... sinon le CUSTOMVERTEX je m'en sert pour d'autres choses qui fonctionne tres bien.

    Donc voila je dois surement oublier un truc évident mais je ne vois pas quoi, un peu d'aide serait la bienvenue.
    Merci

  2. #2
    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
    plutot difficile à dire comme ça.. Il y a 1 million de raisons différentes pour laquelle une géométrie n'est pas affiché à l'écran.

    - vérifie tes coordonnées et tes matrices. Si elles ne sont pas bonnes ton objet sera affiché en dehors de l'écran ou clippé par le near ou far plane. Pareil si ton objet apparait trop petit (moins d'un pixel). Au pire refait les calculs de projection etc à la main et revérifie en hardcodant les matrices.
    - vérifie que tes triangles sont envoyés dans le bon ordre si tu as du culling basé sur l'orientation (front face clock wise ou counter clock wise). Au pire tu désactive le culling temporairement.
    - Est-ce que tu as un zbuffer ? est-ce que la géometrie passe le test du zbuffer ? Désactive le test de profondeur et le test de stencil temporairement pour vérifier.
    - est-ce que ton fond est noir et l'objet tracé est en noir ? Essaie de faire un clear dans une couleur arbitraire (bleu, violet), différente de la couleur de ton objet à vérifier. Si l'objet n'est pas censé être noir vérifie le pixel shader, vertex shader, équation d'éclairage pour le fixed function lighting etc..
    - est-ce que tu as touché au scissor rect ? désactives le scissor rect pour être sûr.
    - est-ce que tu as l'alpha testing en marche ? est-ce que la valeur alpha passe le test d'alpha testing ? désactive l'alpha testing pour être sûr.
    - est-ce que tu as le blending activé ? pareil que plus haut.
    - problème de driver ? essaie sur le refrast.

    Bonne chance.

    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut
    Merci.
    J'aurais préféré un "oh le boulet, ta oublié ...", y'a qua ça a vérifié ?
    Parceque ma caméra point vers l'origine, la matrice est une matrice identité, j'ai mis le DrawIndexedPrimitive à la place d'un mesh->render qui s'affichait tres bien, le culling est désactivé tout comme l'alpha blend, l'alpha test... Enfin tout semble bon, je vais revoir tout ça demain à tete reposée.
    Sinon dons mon code y'a pas de soucis si j'ai bien compris ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut
    Bon, ben c'est moi qui le dit, je suis un boulet, j'ai trouvé, effectivement comme je ne mettais pas de texture ça mettait la texture que je mettais en fond (enfin c'est un peu plus compliqué) et donc c'était rouge sur rouge...
    Merci

  5. #5
    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
    Au moins tu auras appris qu'on ne peut pas ne pas faire d'erreur mais qu'il y a toujours une solution systématique pour s'en tirer lorsque ça arrive .

    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut
    Oui.
    Par contre j'ai du mettre WORD au lieu de DWORD, car ca ne me rendait que quelques triangles, pourtant j'ai bien utilisé sizeof ??

  7. #7
    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 supergrey Voir le message
    Oui.
    Par contre j'ai du mettre WORD au lieu de DWORD, car ca ne me rendait que quelques triangles, pourtant j'ai bien utilisé sizeof ??
    Tes indices sont 16 bits (D3DFMT_INDEX16) donc c'est normal que ce sont des WORDS (16 bits) plutot que des DWORDS (double word, soit 32 bits).

    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

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut
    OK, merci je ne comprenais pas trop ce parametre D3DFMT_INDEX16 justement.
    Merci

Discussions similaires

  1. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  2. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  3. BCP marche quand il veut !!!!
    Par chris92 dans le forum Outils
    Réponses: 2
    Dernier message: 24/03/2003, 09h41
  4. Comment marche GlutSwapBuffers() ?
    Par Sloughidog dans le forum OpenGL
    Réponses: 2
    Dernier message: 29/09/2002, 14h45
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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