Bonsoir,
quelqu'un aurait-il une idée de la façon d'émuler les déclarations de vertex et les streams de Direct3D en OpenGL?
Version imprimable
Bonsoir,
quelqu'un aurait-il une idée de la façon d'émuler les déclarations de vertex et les streams de Direct3D en OpenGL?
Je ne connais pas vraiment bien direct3d (et donc je ne comprends pas exactement ton besoin) mais ceci permet d'utiliser une convention direct3d
http://www.opengl.org/sdk/docs/man4/...kingVertex.xml
Je connais pas les "streams" de Direct3D mais pour les déclaration de vertex j'ai une classe qui retient des triplets (type, taille, nombre, stride) pour chaque attribute et qui fait appel aux bon glMachinPointer quand il faut.
A toi d'assurer ensuite que ton type de vertex effectif correspond avec ce format.
Tu peux changer de format à chaque frame si tu veux, c'est orthogonal avec les données elle-mêmes contenues dans un buffer.
l'équivalent d'un vbo (vboid) : par exemple tu peux stocker uniquement tes positions sur un vertex buffer que tu références par 0, puis tes normales sur le buffer 1, les texcoords sur le 2, etc... on appelle chacun de ces buffers un stream
tu peux aussi entrelacer positions et normales sur un même stream et le reste des attributs sur d'autres buffers et binder/dessiner le tout à chaque frame
oui j'ai fait moi aussi une classe de déclaration de vertex qui décrit les attributs;Citation:
mais pour les déclaration de vertex j'ai une classe qui retient des triplets (type, taille, nombre, stride) pour chaque attribute et qui fait appel aux bon glMachinPointer quand il faut.
A toi d'assurer ensuite que ton type de vertex effectif correspond avec ce format.
mais comment gères tu tes vertex buffers ? tu les regroupes au sein d'une classe, tu les références ?
tu veux dire que sur la frame t je peux remplir un buffer par des triplets de 3 floats puis à la frame t+1 par des doublets de unsigned int ? :?Citation:
Tu peux changer de format à chaque frame si tu veux, c'est orthogonal avec les données elle-mêmes contenues dans un buffer.
Tu peux faire exactement la même chose avec les VBO, mettre normales et couleurs dans un et position dans l'autre par exemple.
J'ai une classe VBO<T> (pas très bien nommée en fait) qui référence un tableau de T, un format de Vertex qui correspond a T et un buffer OpenGL bindé sur la target qui va bien. Je gère pas les index par contre, j'en ai pas encore eu besoin.
Oui.Citation:
tu veux dire que sur la frame t je peux remplir un buffer par des triplets de 3 floats puis à la frame t+1 par des doublets de unsigned int ? :?
Je veux dire que le buffer utilisé comme VBO et le format de vertex (ie les glMachinPointer) sont sélectionnés indépendamment, l'un peut changer sans changer l'autre. Un buffer OpenGL tout seul ne connait pas le type des données qu'il contient (il se base éventuellement sur la target à laquelle tu le binde pour savoir si il contient des texels, des vertex ou des indices).
Heu... ben oui.
tu t'y prends comment ? on peut pas faire de vector<VBO<T> > en C++ (conteneurs homogènes) :?
En fait je les ait pas mis dans des vector.
Sinon rien n'empêche que cette classe ne soit pas templatée et tu perd l'aspect type-safe en pushant tes sommets. Pas très grave quoi.
est-il possible de remplir les buffers directement en bytes ? par exemple si on entrelace po, norm et colors mais sans utiliser de struct, simplement en ajoutant les valeurs une à une sous forme d'octets :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 au lieu de struct Vertex{ float x,y,z; //pos float nx,ny,nz;//norm; unsigned int; //texcoords; }; on fait (byte)float,(byte)float,(byte)float, (byte)float,(byte)float,(byte)float, (byte)unsigned int,
Oui.
Tu peux même mettre dans le même buffer les attributs A et B entrelacés, puis plus loin les attributs C et D entrelacés.
Après à toi de voir si tu as besoin d'un cas comme ca...