Bonjour a tous,
Je cherche a implémenter les octrees pour mon terrain :
J'ai un terrain répartit par petites box(ou tile) de 32*32.
Je charge donc mon fichier terrain et j'envois les points correctement dans chaque quadrillage de chaque box.
Voici le header pour être bien clair :
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 //----------------------------------------------------------------------------- // Box //----------------------------------------------------------------------------- class Box { public: Box(); void Generate(); void Draw(); void DrawBox(); ~Box(); float vertex[32][32]; vec3 normals[32][32]; }; //----------------------------------------------------------------------------- // Terrain //----------------------------------------------------------------------------- class Terrain { public: Terrain(); void Load(const std::string &filename); void SetTexture(const std::string &filename); void SetPosition(vec3 v); void Draw(); ~Terrain(); private: Texture2D texture; Box **box; ivec2 size; ivec2 nbox; vec3 pos; };
Le probleme vient lors de l'affichage (ici la méthode Draw de la classe Box) :
(l'implémentation des VBOs viendra par la suite).
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 for(int y=0; y<31; y++) { glBegin(GL_TRIANGLE_STRIP); for(int x=0; x<31; x+=2) { glNormal3f(normals[y][x].x,normals[y][x].y,normals[y][x].z); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (float)x/32,(float)y/32); glVertex3d(x, vertex[y ][x ]/2, y); glNormal3f(normals[y+1][x].x,normals[y+1][x].y,normals[y+1][x].z); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (float)x/32,(float)y/32+(1.f/32)); glVertex3d(x, vertex[y+1][x ]/2, y+1); glNormal3f(normals[y+1][x+1].x,normals[y+1][x+1].y,normals[y+1][x+1].z); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (float)x/32+(1.f/32),(float)y/32); glVertex3d(x+1, vertex[y][x+1]/2, y); glNormal3f(normals[y+2][x+1].x,normals[y+2][x+1].y,normals[y+2][x+1].z); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (float)x/32+(1.f/32),(float)y/32+(1.f/32)); glVertex3d(x+1, vertex[y+1][x+1]/2, y+1); } glEnd(); }
Pour afficher la denière ligne de triangle_strip j'ai besoin des données de la box d'après.
Ce qui me donne donc des problemes au niveau du rendu, il manque des "raccords" :
Voila, je ne trouves pas comment régler ce problème proprement :/.
Je pensais faire des box de 33*33 qui contiendrait donc la 1ere donnée du box d'après pour compléter ces "raccords" mais je voulais d'abord entendre vos conseils .
Merci d'avance.
Partager