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
| void QT_OpenGL::initializeGL()
{
glShadeModel(GL_SMOOTH); // Enable smooth shading
glClearColor(1.0f, 1.0f, 1.0f, 0.5f); // Black background
glClearDepth(1.0f); // Depth buffer setup
glEnable(GL_DEPTH_TEST); // Enables depth testing
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_MULTISAMPLE);
glDepthFunc(GL_LEQUAL); // The type of depth testing to do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Tex_Cube = LoadTexture("tex.png");
}
void QT_OpenGL::resizeGL(int width, int height)
{
if (height==0)
{
height=1;
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70,(GLfloat)width/(GLfloat)height,1,1000);
}
void QT_OpenGL::paintGL()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//Caméra
gluLookAt(2,2,2,0,1,0,0,1,0);
//Texture
glBindTexture(GL_TEXTURE_2D, Tex_Cube);
glRotatef(Angle, 0, 1, 0);
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex3i( -1, 0, 0);
glTexCoord2i(1, 0); glVertex3i( +1, 0, 0);
glTexCoord2i(1, 1); glVertex3i( +1, +2, 0);
glTexCoord2i(0, 1); glVertex3i( -1, +2, 0);
glEnd();
glRotatef(90, 0.0f ,1.0f, 0.0f);
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex3i( -1, 0, 0);
glTexCoord2i(1, 0); glVertex3i( +1, 0, 0);
glTexCoord2i(1, 1); glVertex3i( +1, +2, 0);
glTexCoord2i(0, 1); glVertex3i( -1, +2, 0);
glEnd();
}
//Charger une texture OpenGL
GLuint QT_OpenGL::LoadTexture(char *filename)
{
QImage TextureImg = QImage(filename);
QImage Texture;
GLuint TextureGL;
Texture = QGLWidget::convertToGLFormat(TextureImg);
glGenTextures(1, &TextureGL);
glBindTexture(GL_TEXTURE_2D, TextureGL);
glTexImage2D(GL_TEXTURE_2D, 0, 4, Texture.width(), Texture.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, Texture.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
return TextureGL;
} |