Bonsoir,
J'ai actuellement un problème avec le tutorial sur les skybox.
Je n'arrive pas a le faire fonctionner correctement :/
Le pire c'est que dans l'après midi ca a fonctionné, et entre temps j'ai du refaire le code ( fausse manip ) et je n'y arrive plus ><
A savoir que la fonction ImageLoad fonctionne très bien
quand je passe le float t de drawSkybox a 1.0f, il m'affiche une seule face qui se déplace en même temps que moi
mes images sont en taille 400*400 si ca a une quelconque importance
Merci a ceux qui prendront le temps de m'aider et surtout de m'expliquer ce qui pose problème
Voici le code en question:
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 GLuint initSkybox(){ // Liste des faces successives pour la création des textures de CubeMap GLenum cube_map_target[6] = { GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB }; // Chargement des six textures Image* texture_image[6]; int i; for(i=0;i<6;i++){ texture_image[i]=(Image*)malloc(sizeof(Image)); } ImageLoad("left.bmp",texture_image[0] ); ImageLoad( "right.bmp",texture_image[1] ); ImageLoad( "back.bmp",texture_image[2] ); ImageLoad( "front.bmp",texture_image[3] ); ImageLoad( "bottom.bmp",texture_image[4] ); ImageLoad( "top.bmp",texture_image[5] ); // Génération d'une texture CubeMap GLuint cube_map_texture_ID; glGenTextures(1, &cube_map_texture_ID); // Configuration de la texture glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, cube_map_texture_ID); for (i = 0; i < 6; i++) { glTexImage2D(cube_map_target[i], 0, 3, texture_image[i]->sizeX, texture_image[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_image[i]->data); if (texture_image[i]) { if (texture_image[i]->data) { free(texture_image[i]->data); } free(texture_image[i]); } } glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); return(cube_map_texture_ID); }
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
53
54
55
56
57 void drawSkybox(GLuint cube_map_texture_ID){ // Taille du cube float t = 1.0f; // Utilisation de la texture CubeMap glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, cube_map_texture_ID); // Réglage de l'orientation glPushMatrix(); glLoadIdentity(); // Rendu de la géométrie glBegin(GL_TRIANGLE_STRIP); // X Négatif glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); glEnd(); glBegin(GL_TRIANGLE_STRIP); glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); glTexCoord3f(t,t,t); glVertex3f(t,t,t); glEnd(); glBegin(GL_TRIANGLE_STRIP); // Y Négatif glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); glEnd(); glBegin(GL_TRIANGLE_STRIP); // Y Positif glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); glTexCoord3f(t,t,t); glVertex3f(t,t,t); glEnd(); glBegin(GL_TRIANGLE_STRIP); // Z Négatif glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); glEnd(); glBegin(GL_TRIANGLE_STRIP); // Z Positif glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); glTexCoord3f(t,t,t); glVertex3f(t,t,t); glEnd(); // Réinitialisation de la matrice ModelView glPopMatrix(); }
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 int main(int argc, char* argv[]){ remplissageTableau(); initKeystate(); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(50, 50); glutCreateWindow("Affichage 3D"); char* extensions = (char*) glGetString(GL_EXTENSIONS); if(strstr(extensions, "GL_ARB_texture_cube_map") != NULL) { id_skybox=initSkybox(); } glutDisplayFunc(Affichage); glutIgnoreKeyRepeat(0); glutKeyboardFunc(ajoutTableau); glutKeyboardUpFunc(retireTab); glutMainLoop(); return 0; }
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 void Affichage(){ int cote=0; int i=0; int j=0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glColor3f( 1.0f, 1.0f, 1.0f ); // Configuration des états OpenGL glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_CUBE_MAP_ARB); glDisable(GL_LIGHTING); // Désactivation de l'écriture dans le DepthBuffer glDepthMask(GL_FALSE); // Rendu de la SkyBox drawSkybox( id_skybox ); // Réactivation de l'écriture dans le DepthBuffer glDepthMask(GL_TRUE); // Réinitialisation des états OpenGL glDisable(GL_TEXTURE_CUBE_MAP_ARB); // Puis la suite de mon code mais qui n'a pas d'importance je suppose
Partager