Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1266 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comment stocker mes sommets pour utiliser les VertexArrays

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment stocker mes sommets pour utiliser les VertexArrays

n°267136
_momone_
Posté le 11-12-2002 à 14:49:53  profilanswer
 

J'ai commencé à programmer un moteur 3D et là j'en suis à l'affichage d'un mesh.
 
Mon mesh est défini comme ça:

Code :
  1. class CVector
  2. {
  3.    float m_Vector[3];
  4. public:
  5.    //Plein de méthodes
  6. };
  7. class CMesh
  8. {
  9.    CVector *m_Vertices;        //Tableau de sommets
  10.    unsigned int *m_VerticeID;  //Liste des triangles
  11. public:
  12.    Draw();
  13. };


 
Maintenant, dans ma méthode Draw(), j'aimerai utilisé les VertexArray d'OpenGL donc il me faut un tableau continu dans la mémoire de floats représentant les coordonnées des sommets. Or, je stocke mes sommets comme des objets CVector et non comme des tableaux de floats...
Sachant que je veux garder, dans la classe CMesh, les sommets comme des objets CVector (pour pouvoir utiliser toutes les méthodes de CVector dessus), comment je peux faire pour obtenir ce tableau continu de float à partir de mon tableau de CVector??
 
J'ai pensé faire un cast bourrin vu que le seul attribut de CVector c'est le vecteur stocké dans un tableau de float, mais je sais même pas si ça marche et puis c'est quand même un peu crade :lol:
Ou alors, j'ai pensé, à chaque frame, allouer un tableau de floats et recopier les valeurs de chaque sommets dedans mais niveau performance, ca doit pas être ça...


Message édité par _momone_ le 11-12-2002 à 17:40:36
mood
Publicité
Posté le 11-12-2002 à 14:49:53  profilanswer
 

n°267152
youdontcar​e
Posté le 11-12-2002 à 15:03:16  profilanswer
 

_Momone_ a écrit :

J'ai pensé faire un cast bourrin vu que le seul attribut de CVector c'est le vecteur stocké dans un tableau de float

bien pensé, c'est la bonne solution. une classe qui ne possède pas de méthodes virtuelles a généralement la même taille que les données qu'elle contient (ça dépend du compilo, par ex une structure d'un byte peut prendre 4 octets si alignement sur dword).
 
pour le design futur de ton moteur, je te conseille d'abstraire ta classe CVector / m_Vertices dans une classe à part. ça te permettra de traiter les instances / abstraire une géométrie dynamique comme MAX.

n°267307
_momone_
Posté le 11-12-2002 à 16:38:48  profilanswer
 

Citation :

une classe qui ne possède pas de méthodes virtuelles a généralement la même taille que les données qu'elle contient (ça dépend du compilo, par ex une structure d'un byte peut prendre 4 octets si alignement sur dword).


Si ca dépend du compilo, c'est pas top non plus... J'aimerais faire un truc portable qui compile partout. Là je compile avec GCC sous Linux, mais j'aimerais bien que mon programme reste compilable sous Windows.
Sinon, ya pas de méthodes plus élégantes qu'un cast?? Par exemple, si je modifie la classe CVertex (en ajoutant un attribut) ça va plus marcher.
 

Citation :

pour le design futur de ton moteur, je te conseille d'abstraire ta classe CVector / m_Vertices dans une classe à part. ça te permettra de traiter les instances / abstraire une géométrie dynamique comme MAX.


Je suis pas sûr d'avoir compris ce que tu as dis là.
Ce que je fais en fait, j'ai une class CSubSet qui décrit le maillage associé à une texture unique. J'ai également une classe CObject qui possède une liste dynamique de CSubSet et qui dessine tous les subsets de la liste. CMesh dérive de CObject et lui rajoutte quelques méthodes comme une méthode de lecture de fichier et une méthode qui gère l'animation. Si je veux ajoutter un maillage à mon objet, j'ai juste à rajoutter un subset à ma liste.

n°267496
youdontcar​e
Posté le 11-12-2002 à 18:43:35  profilanswer
 

_Momone_ a écrit :

Si ca dépend du compilo, c'est pas top non plus... J'aimerais faire un truc portable qui compile partout. Là je compile avec GCC sous Linux, mais j'aimerais bien que mon programme reste compilable sous Windows.

je détaillais pour l'alignement sur dword, le plus courant. tant que ta structure est un multiple de 4, pas de problèmes.  
 

_Momone_ a écrit :

Sinon, ya pas de méthodes plus élégantes qu'un cast?? Par exemple, si je modifie la classe CVertex (en ajoutant un attribut) ça va plus marcher.

recopie des vertices avec une boucle, mais bof ... et oui si tu rajoutes un attribut, boum.
 
 

_Momone_ a écrit :

Je suis pas sûr d'avoir compris ce que tu as dis là.
Ce que je fais en fait, j'ai une class CSubSet qui décrit le maillage associé à une texture unique. J'ai également une classe CObject qui possède une liste dynamique de CSubSet et qui dessine tous les subsets de la liste. CMesh dérive de CObject et lui rajoutte quelques méthodes comme une méthode de lecture de fichier et une méthode qui gère l'animation. Si je veux ajoutter un maillage à mon objet, j'ai juste à rajoutter un subset à ma liste.

ok, rien à redire vu que ce n'est pas le code de ton exemple :D


Message édité par youdontcare le 11-12-2002 à 18:44:05
n°267541
_momone_
Posté le 11-12-2002 à 19:31:34  profilanswer
 

Ok, merci pour tes réponses youdontcare :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comment stocker mes sommets pour utiliser les VertexArrays

 

Sujets relatifs
[php] utiliser listbox avec une requete sqlPourquoi rester en C au lieu d'utiliser C++ ?
Quel environment pour utiliser GCC sous Windows?Que vaut msde? et comment l'utiliser?
utiliser phpmyadmin en multi-utilisateur[ASP] Espace dans un champ de BDD, comment utiliser ?
[HTML, JS] Comment utiliser deux targets dans un lienUtiliser un Makefile sous Windows/DOS, c'est possible?
forcer le codepage à utiliserMMORPG : Quel moteur utiliser ? Genesis ? Crystal Space ?
Plus de sujets relatifs à : Comment stocker mes sommets pour utiliser les VertexArrays


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR