Mappage d´une texture sur un quadrilatère
Ce programme affiche une texture mappée sur une face. Le programme se lance ainsi: demo6 image.bmp où "image.bmp " est un fichier image au format BMP (RGB 24 bits) dans le même répertoire que le programme.
Fichier : demoGLUT/demo6.cpp #include "demo.h"
#include "bitmap.h"
/*********************************************************************
* AUTOGENERATED CODE
*********************************************************************/
#include "texture.hpp"
/*********************************************************************
* GUI DESIGN
*********************************************************************/
void onReshape(int width,int height){
float r=(float) width/height;
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70,(float) width/height,0.1,10);
}
SCENE(Scene,textureDisplay,onReshape);
CONTROL(Control,textureLines);
SPLIT(Split,1,0.6,&Control,&Scene);
/*********************************************************************
* TEXTURE GENERATION
*********************************************************************/
unsigned int Texture;
void loadTextures(char* filename){
bitmap<unsigned char> b;
try {
b.loadFile(filename);
}
catch(...){
std::cout << "Could not open bitmap file " << filename << std::endl;
throw;
}
glGenTextures(1,&Texture);
glBindTexture(GL_TEXTURE_2D,Texture);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,b.getWidth(),b.getHeight(),GL_RGB,GL_UNSIGNED_BYTE,b.getData());
glEnable(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
}
/*********************************************************************
* MAIN PROGRAM
*********************************************************************/
int main(int argc,char *argv[]){
int a=800,b=600,x,y;
if (argc==1){
std::cout << "usage : " << argv[0] << " image.bmp" << std::endl;
return -1;
}
glutInit(&argc,argv);
x=glutGet(GLUT_SCREEN_WIDTH);
y=glutGet(GLUT_SCREEN_HEIGHT);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition((x-a)/2,(y-b)/2);
glutInitWindowSize(a,b);
createWindow(&Split,"OpenGL demo");
loadTextures(argv[1]);
glutMainLoop();
return 0;
} Pour information: Fichier : demoGLUT/texture.txt glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(#f-5:0:5#,#f-5:0:5#,#f-5:5:5#,0,0,0,0,1,0);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,#eGL_CLAMP:GL_REPEAT#);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,#eGL_CLAMP:GL_REPEAT#);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,#eGL_NEAREST:GL_LINEAR:GL_NEAREST_MIPMAP_NEAREST:GL_LINEAR_MIPMAP_NEAREST:GL_NEAREST_MIPMAP_LINEAR:GL_LINEAR_MIPMAP_LINEAR#);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,#eGL_NEAREST:GL_LINEAR#);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(#f-10:0:10#,#f-10:0:10#);
glVertex2f(#f-1:-1:1#,#f-1:-1:1#);
glTexCoord2f(#f-10:1:10#,#f-10:0:10#);
glVertex2f(#f-1:1:1#,#f-1:-1:1#);
glTexCoord2f(#f-10:0:10#,#f-10:1:10#);
glVertex2f(#f-1:-1:1#,#f-1:1:1#);
glTexCoord2f(#f-10:1:10#,#f-10:1:10#);
glVertex2f(#f-1:1:1#,#f-1:1:1#);
glEnd();
glFlush();
glutSwapBuffers(); Ce document a été traduit de LaTeX par HeVeA |