Voila j'essaye de faire un cube avec des texture dessus. J'arrive à charger l'image avec la librairie SDL. Mais apres la texture est pas joli elle ne représente pas l'image.
http://splotch.fr/caisse_bois.tga
http://splotch.fr/cube_texture_bug.png
Mes codes :
main.cpp
scene.hppCode:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 using namespace std; #include <stdlib.h> #include <math.h> #include <unistd.h> #include <GL/glew.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include "scene.hpp" #define ESCAPE 27 // La scene Scene s; // La fenetre int _win; int _win_width; int _win_height; // Prototype glut void Rechape (int Width, int Height); void Display (); void Keyboard (unsigned char key, int x, int y); int main(int argc, char **argv) { // Initialisation fenetre glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH); glutInitWindowSize(640, 480); glutInitWindowPosition(50, 50); _win = glutCreateWindow("SIA Project - FERY MORI"); glutFullScreen(); // Initialisation evenement glutDisplayFunc(&Display); glutIdleFunc(&Display); glutReshapeFunc(&Rechape); glutKeyboardFunc(&Keyboard); // OpenGL - Boucle glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)_win_width/(GLfloat)_win_height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); s.init(); glutMainLoop(); return 1; } /* Evenement : ----------- */ void Rechape (int Width, int Height) { if (Height==0) Height=1; glViewport(0, 0, Width, Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); } void Display () { glClearColor(175,151,124,0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f); s.draw(); /* Dessin de la scene */ glutSwapBuffers(); } void Keyboard (unsigned char key, int x, int y) { if (key == ESCAPE) { glutDestroyWindow(_win); exit(0); } }
caisse.hppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #ifndef SCENE_HPP #define SCENE_HPP #include "caisse.hpp" class Scene { public: void init (); void draw (); private: Caisse caisse; }; #endif /* SCENE_HPP */
scene.cppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef CAISSE_HPP #define CAISSE_HPP #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> class Caisse { public: void set (); void draw (); private: GLuint _id; }; #endif /* CAISSE_HPP */
caisse.cppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "scene.hpp" #include "caisse.hpp" #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <iostream> void Scene::init () { caisse.set(); } void Scene::draw () { caisse.draw(); }
Donc voila je sais pas pourquoi la texture ne couvre pas la totalité de mon cube et pourquoi l'image est moche et déformée comme ca.Code:
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
58
59
60
61
62
63 #include "caisse.hpp" #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> void Caisse::set() { SDL_Surface *texture; glGenTextures(1,&_id); texture = IMG_Load ("../texture/caisse_bois.tga"); glBindTexture (GL_TEXTURE_2D, _id); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels); } void Caisse::draw() { glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); glBindTexture(GL_TEXTURE_2D, _id); glBegin(GL_QUADS); // Front Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad // Back Face glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad // Top Face glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad // Bottom Face glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad // Right face glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad // Left Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glEnd(); }
Si quelqu'un à la solution je le remercie d'avance je vais quand meme continué de chercher.
Merci d'avance.