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 :

[DGraphics] Créé un cube à 6 vertices plus simplement


Sujet :

DirectX

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [DGraphics] Créé un cube à 6 vertices plus simplement
    Bonjour

    Voilà en faite je debute en 3D avec DirectGraphics et je me posais une question, je voulais savoir si il etait possible avec une fonction du type DrawIndexedPrimitive d'afficher un cube, mais en passant en parametre :
    - le nombre de vertices (6 pour un cube)
    - le nombre de face (12 pour un cube)
    - l'indexbuffer (avec setindices)
    - le vertexbuffer (avec setstreamsource)

    Au lieu de passer 24 vertices ?

    Donc en gros au lieu de passer la liste des triangle qu'il trouve comment faire lui même grace à l'indexbuffer

    (Si c'est n'est pas trés clair dite moi ce que vous ne comprenez pas dans ma question)

    Merci d'avance

  2. #2
    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 : 39
    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
    Ben le but de DrawIndexedPrimitive() et des index buffers c'est justement ça, donc... oui !
    Pour les explications regarde la doc du SDK et les samples. Par contre attention, au début c'est pas toujours évident de s'y retrouver entre tous les paramètres de DrawIndexedPrimitive().

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    En faite j'ai dejà regarder un peu partout et tout les exemples que j'ai pu voir donner 24 vertices pour un cube

    Je vais continuer de chercher et regarder dans les samples du sdk

    Merci (si quelqu'un veut rajouter quelque chose ou m'eclairer je suis preneur)

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Au faite je voulais dire 8 vertices et pas 6 (le cerveau qui marche plus trés bien)

  5. #5
    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 : 39
    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
    Si tous les exemples que t'as vu prenaient 24 vertices c'est certainement pour des problèmes de coordonnées de texture. Parce que si t'en prends que 8 tu ne pourras pas correctement appliquer de texture.
    Sinon ton problème c'est quoi ? Tu veux savoir précisément comment utiliser DrawIndexedPrimitive() ? T'as pas encore essayé ?

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Si j'ai essayer et justement j'arrive à faire un cube en passant 24 vertices en parametre, mais je n'arrive pas à le faire en passant que 8 vertices ( et je n'avais pas preciser, c'est avec directx 8 )

    Voilà les bouts de code concerné :

    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
    ...
    D3D_Device->CreateVertexBuffer(nbvertices * sizeof(ISL_VERTEX), D3DUSAGE_WRITEONLY, D3D_VERTEXTYPE, D3DPOOL_MANAGED, &vbuffer);
    D3D_Device->CreateIndexBuffer ((nbfaces * 3) * sizeof (ISL_INDICE), D3DUSAGE_DONOTCLIP, D3DFMT_INDEX16, D3DPOOL_MANAGED, &ibuffer);
    ...
    vbuffer->Lock( 0, nbvertices * sizeof(ISL_VERTEX), (BYTE**) &vertices,0);
    memcpy(vertices, CubeV, nbvertices * sizeof(ISL_VERTEX));
    vbuffer->Unlock();
     
    ibuffer->Lock(0,(nbfaces * 3)  * sizeof (ISL_INDICE), (BYTE **) &indices,0);
    memcpy(indices, CubeI, (nbfaces * 3)  * sizeof(ISL_INDICE));
    ibuffer->Unlock();
    ...
    D3D_Device->SetIndices(ibuffer, 0);
    D3D_Device->SetStreamSource( 0, vbuffer, sizeof(ISL_VERTEX));
    D3D_Device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, nbvertices, 0, nbfaces);
    ...
    Les variables nbvertices et nbfaces contienne respectivement 8 et 12
    Les tableaux CubeV et CubeI contienne la liste des vertices et les indices des faces
    ibuffer est un indexbuffer
    vbuffer est un vertexbuffer
    vertices et de type ISL_VERTEX
    indices et de type ISL_INDICE

    ------------------------------------------------------------------------

    ISL_INDICE et un typedef sur un WORD
    ISL_VERTEX et une structure defini comme ceci

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

    Et les tableaux contiennent

    -0.500 -0.500 0.500
    -0.500 -0.500 -0.500
    -0.500 0.500 -0.500
    -0.500 0.500 0.500
    0.500 -0.500 0.500
    0.500 -0.500 -0.500
    0.500 0.500 -0.500
    0.500 0.500 0.500

    0 1 2
    2 3 0
    0 4 5
    5 1 0
    1 5 6
    6 2 1
    3 2 6
    6 7 3
    0 3 7
    7 4 0
    4 7 6
    6 5 4

    Voilà c'est a peu prés ca, ca marche trés bien si je remplace les tableaux par ceux qui utilise 24 vertices et que je met nbvertices à 24, mais la ca marche pas

  7. #7
    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 : 39
    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
    mais la ca marche pas
    C'est-à-dire ?

    Quand tu dis qu'avec 24 vertices ça marche, càd en gardant le même code et en remplissant l'index buffer avec {0, 1, 2, 3, ..., 23} ?

    Sinon au niveau du code a priori j'ai rien vu de choquant.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    En faite si je met nbvertices à 24 et que les tableaux CubeV et CubeI je les change par ces deux autre tableaux

    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
    ISL_VERTEX CubeV[] = {
     {- 0.5f,   0.5f,   0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {  0.5f,   0.5f,   0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {  0.5f,   0.5f, - 0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {- 0.5f,   0.5f, - 0.5f, 0xFFFF0000, 0.0f, 1.0f},
      // Avant
     {- 0.5f,   0.5f, - 0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {  0.5f,   0.5f, - 0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {  0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {- 0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 0.0f, 1.0f},
      // Dessous
     {- 0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {  0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {  0.5f, - 0.5f,   0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {- 0.5f, - 0.5f,   0.5f, 0xFFFF0000, 0.0f, 1.0f},
      // Arrière
     {- 0.5f, - 0.5f,   0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {  0.5f, - 0.5f,   0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {  0.5f,   0.5f,   0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {- 0.5f,   0.5f,   0.5f, 0xFFFF0000, 0.0f, 1.0f},
      // Gauche
     {- 0.5f,   0.5f,   0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {- 0.5f,   0.5f, - 0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {- 0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {- 0.5f, - 0.5f,   0.5f, 0xFFFF0000, 0.0f, 1.0f},
      // Droite
     {  0.5f,   0.5f, - 0.5f, 0xFFFF0000, 0.0f, 0.0f},
     {  0.5f,   0.5f,   0.5f, 0xFFFF0000, 1.0f, 0.0f},
     {  0.5f, - 0.5f,   0.5f, 0xFFFF0000, 1.0f, 1.0f},
     {  0.5f, - 0.5f, - 0.5f, 0xFFFF0000, 0.0f, 1.0f},
    };
     
    WORD CubeI[] = {
       // Dessus
      0,  1,  2,
      0,  2,  3,
       // Avant
      4,  5,  6,
      4,  6,  7,
       // Dessous
      8,  9, 10,
      8, 10, 11,
       // Arrière
      12, 13, 14,
      12, 14, 15,
       // Gauche
      16, 17, 18,
      16, 18, 19,
       // Droite
      20, 21, 22,
      20, 22, 23,
    };
    En gardant le même code ca marche

    Sinon si je laisse à 8 vertices avec les deux autres tableaux j'ai que 2 ou 3 triangles qui apparaisse

  9. #9
    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 : 39
    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
    T'as vérifié l'ordre de tes vertices (CW ou CCW) ?

    Un ptit conseil : quand des triangles ne s'affichent pas, le 1er truc à faire est de mettre le RS D3D_CULLMODE à D3DCULL_NONE pour être sûr de pas se faire avoir par un mauvais sens de culling.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Non j'avais dejà essayer mais ca ne vient pas de ça

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bon j'ai enfin trouver, j'ai examiner chaque ligne de code (pendant 3 heures) et en faite j'avais declarer un long au lieu d'un word pour les indices à un mauvaise endroit..... hum.....

    hahahahhahahahahhaha.... j'suis trop con !

    Excuse moi loulou de t'avoir deranger pour rien, de t'avoir fais chercher betement et d'avoir diminuer la periode de vie de ton clavier de quelque phrase... donc... pardon !

    Merci quand même d'avoir chercher, quand je serais riche (esperons le) je te filerai un disque dur gratos ( c'est pas gentil ça ? )

  12. #12
    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 : 39
    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
    Excuse moi loulou de t'avoir deranger pour rien
    Je me fais pas mal chier en ce moment, alors... n'hésite pas

    quand je serais riche (esperons le) je te filerai un disque dur gratos
    C'est noté !

Discussions similaires

  1. Broadcaster /dev/video le plus simplement possible
    Par prgasp77 dans le forum Administration système
    Réponses: 0
    Dernier message: 27/01/2011, 13h53
  2. Gérer le plus simplement possible les collisions
    Par klakman dans le forum Physique
    Réponses: 5
    Dernier message: 27/11/2009, 16h03
  3. Comment enregistrer les images plus simplement ?
    Par Gunner4902 dans le forum Windows XP
    Réponses: 15
    Dernier message: 31/07/2008, 20h35
  4. Réponses: 5
    Dernier message: 05/04/2008, 17h19
  5. Jouer un fichier ogg le plus simplement...
    Par calogerogigante dans le forum Multimédia
    Réponses: 1
    Dernier message: 16/02/2006, 17h59

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