bonjour à tous !
je développe actuellement une application en C++ avec OpenGL, il s'agit d'un jeu d'échec offrant une interface en 3D...
j'ai cependant un problème, j'ai modelé un échiquier en assez haute résolution et je cherche maintenant à l'afficher...
à noter que lorsque je faisais mes tests avec un échiquier "basique" (4 grids pour le contour, + 1 pour le plateau, je ne rencontrais aucun problème...
ais maintenant, losque je veux afficher mon échiquier haute résolution, il se produit une erreur windows :
et le programme s'arrête avant l'afichage du premier frame...ChessMaster3D.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru... etc.
j'ai ocalisé la ligne qui produit cette erreur (si je place un // devant, plus de problèmes), c'est celle çi :
avec ceci juste avant
Code : Sélectionner tout - Visualiser dans une fenêtre à part glDrawArrays(GL_TRIANGLES, 0, echiquier_numvertices);, ou echiquier_mesh_data est un énorme tableau de 4900 floats à peu près...
Code : Sélectionner tout - Visualiser dans une fenêtre à part glInterleavedArrays(GL_T2F_N3F_V3F, 0, echiquier_meshdata);
voivi le coe de la fonction qui est censé afficher le tout :
voilà... si je commente le
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 void Echiquier::display(GEO3_TEXTURE *tex, int mode) { glRotatef(-90.0, 1.0, 0.0, 0.0); if(mode == GL_RENDER) { glBindTexture(GL_TEXTURE_2D, tex[3]); // ECHIQUIER glInterleavedArrays(GL_T2F_N3F_V3F, 0, echiquier_meshdata); glDrawArrays(GL_TRIANGLES, 0, echiquier_numvertices); // AFFICHAGE DU PETIT VERTEX ARRAY, VALIDE.... glBindTexture(GL_TEXTURE_2D, tex[2]); // PLATEAU glInterleavedArrays(GL_T2F_N3F_V3F, 0, plateau_meshdata); glDrawArrays(GL_TRIANGLES, 0, plateau_numvertices); glDisable(GL_DEPTH_TEST); // REFLET glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); glBindTexture(GL_TEXTURE_2D, tex[2]); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glDrawArrays(GL_TRIANGLES, 0, plateau_numvertices); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); } // ... code source sans intérêt... if(mode == GL_RENDER) { glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); } return; }, j'obtiens bel et bien mon plateau avec ses textures, tout marche nickel, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part glDrawArrays(GL_TRIANGLES, 0, echiquier_numvertices);
maintenant si je veux afficher lechiquier au complet (je décomente donc la ligne... ça bug)...
à noter que les données du tableau sont sures à 99%, car elles sont générés par le même script (MaxScript) qui génère celles du plateau, qui s'affiche normalement...
la seule différence entre les deux objets et en fait la taille du tableau, l'un possède 70 floats, l'autre près de 5000
pour mettre ces données en émoire, j'ai crée un fichier header dans lequel je éclare mes tableaux en static const... cette methode est-elle bonne ?
c'est la première fois que je me vois confronté à un tel problème, je ne pense pas qu'il s'agisse d'un problème lié à opengl directement, ausi je me pose des questions...
je n'obtiens aucune erreur OpenGL juste avant l'appel au glDrawArray qui me pose problème, je compile avec Visual c++ 6.0 sous windows xp sp2...
voili, je reste sans réponse devant un tel bug, d'autant plus que j'arriavsi à aficher avant ces deux objets sans passer par les VertexArray (en bouclant sur le nombre de vertex de l'objet...)
si vous entrevoyez une bribe d'ébauche d'informations qui pourrait me sortir de là et m'éviter de looooongue snuits blanches![]()
je ne sais pas si c'est intéréssant, mais je fournis la déclaration ds deux tableaux de vertex...
merci !
Partager