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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| #include <GL/openglut.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
GLfloat rot=0;
GLuint texture;
void gtexture(char filename[], int largeur, int hauteur)
{
char * donne=NULL;
FILE * file=NULL;
file=fopen(filename,"rb");
if (file)
{
donne=(char *)malloc(largeur*hauteur*3);
fread(donne,largeur*hauteur*3, 1, file);
fclose(file);
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_NEAREST);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, largeur, hauteur, 0, GL_RGB, GL_UNSIGNED_BYTE, donne);
free(donne);
}
else
{
printf("Erreur du fichier.\n");
}
}
void sol()
{
glPushMatrix();
glBindTexture(GL_TEXTURE_2D,texture);
glBegin(GL_QUADS);
glTexCoord2d(0,1); glVertex3f(-3.0,-1.0,1.0);
glTexCoord2d(10,0); glVertex3f(3.0,-1.0,1.0);
glTexCoord2d(10,10); glVertex3f(3.0,-1.0,-10.0);
glTexCoord2d(0,10); glVertex3f(-3.0,-1.0,-10.0);
glEnd();
glPopMatrix();
}
void caisse()
{
glPushMatrix();
glTranslatef(0,0.1f,-2.0);
glRotated(rot,0,1.0f,0);
glBegin(GL_QUADS);
glVertex3f(-0.5f,-0.5f,1.0);
glVertex3f(0.5f,-0.5f,1.0);
glVertex3f(0.5f,0.5f,1.0);
glVertex3f(-0.5f,0.5f,1.0);
glVertex3f(-0.5f,-0.5f,-1.0);
glVertex3f(0.5f,-0.5f,-1.0);
glVertex3f(0.5f,0.5f,-1.0);
glVertex3f(-0.5f,0.5f,-1.0);
glVertex3f(-0.5f,-0.5f,1.0);
glVertex3f(0.5f,-0.5f,1.0);
glVertex3f(0.5f,-0.5f,-1.0);
glVertex3f(-0.5f,-0.5f,-1.0);
glVertex3f(-0.5f,0.5f,1.0);
glVertex3f(0.5f,0.5f,1.0);
glVertex3f(0.5f,0.5f,-1.0);
glVertex3f(-0.5f,0.5f,-1.0);
glVertex3f(0.5f,0.5f,1.0);
glVertex3f(0.5f,-0.5f,1.0);
glVertex3f(0.5f,-0.5f,-1.0);
glVertex3f(0.5f,0.5f,-1.0);
glVertex3f(-0.5f,0.5f,1.0);
glVertex3f(-0.5f,-0.5f,1.0);
glVertex3f(-0.5f,-0.5f,-1.0);
glVertex3f(-0.5f,0.5f,-1.0);
glEnd();
glPopMatrix();
}
void affichage()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
gluLookAt(0,1,2.0, 0,0,0, 0,1,0);
sol();
caisse();
glutSwapBuffers();
rot+=0.1f;
}
void reshape(int w, int h)
{
glViewport ( 0, 0, ( GLsizei ) w, ( GLsizei ) h ) ;
glMatrixMode ( GL_PROJECTION ) ; glEnd ();
glLoadIdentity ( ) ;
gluPerspective ( 60, ( GLfloat ) w / ( GLfloat ) h, 1.0, 100.0 ) ;
glMatrixMode ( GL_MODELVIEW ) ;
glEnd ();
}
int main(int argc, char *argv[])
{
glutInit( &argc, argv);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("OpenGL/Glut");
char fichier[]="sol.bmp";
gtexture(fichier,128,128);
glutDisplayFunc(affichage);
glutIdleFunc(affichage);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
} |
Partager