您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > OpenGL纹理贴图简单例子
【代码】#includewindows.h#includeGL/glut.h#includeGL/glext.hstaticdoubleX=0;staticdoubleY=0;staticdoubleZ=7;//定义函数指针,在Windows环境下使用OpenGL扩展PFNGLACTIVETEXTUREARBPROCglActiveTextureARB=NULL;PFNGLMULTITEXCOORD2FARBPROCglMultiTexCoord2fARB=NULL;//纹理存储数组staticGLubyteT0[64][64][4];staticGLubyteT1[64][64][4];staticGLubyteT2[64][64][4];//纹理名字staticGLuintTname0;staticGLuintTname1;staticGLuintTname2;//创建纹理voidmakeImages(){inti,j,c;//第一个纹理,渐变绿色,*64for(i=0;i64;i++){for(j=0;j64;j++){T0[i][j][0]=(GLubyte)0;T0[i][j][1]=(GLubyte)i*5+j*5;T0[i][j][2]=(GLubyte)0;T0[i][j][3]=(GLubyte)255;}}//第二个纹理,黑白相间横条,*64for(i=0;i64;i++){for(j=0;j64;j++){if(i%168)c=255;elsec=0;T1[i][j][0]=(GLubyte)c;T1[i][j][1]=(GLubyte)c;T1[i][j][2]=(GLubyte)c;T1[i][j][3]=(GLubyte)255;}}//第三个纹理,黑白相间竖条,*64for(i=0;i64;i++){for(j=0;j64;j++){if(j%168)c=255;elsec=0;T2[i][j][0]=(GLubyte)c;T2[i][j][1]=(GLubyte)c;T2[i][j][2]=(GLubyte)c;T2[i][j][3]=(GLubyte)255;}}}voidinit(){//获取函数地址glActiveTextureARB=(PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress(glActiveTextureARB);glMultiTexCoord2fARB=(PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress(glMultiTexCoord2fARB);//场景初始化glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);glEnable(GL_DEPTH_TEST);makeImages();//纹理初始化glPixelStorei(GL_UNPACK_ALIGNMENT,1);//对其像素字节glGenTextures(1,&Tname0);//获取纹理名字glGenTextures(1,&Tname1);//获取纹理名字glGenTextures(1,&Tname2);//获取纹理名字//初始化纹理glBindTexture(GL_TEXTURE_2D,Tname0);//生成指定名字的纹理对象glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,64,64,0,GL_RGBA,GL_UNSIGNED_BYTE,T0);//设置纹理对象内容glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);//设置纹理过滤方式glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);//设置纹理过滤方式glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理过滤方式glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//设置纹理过滤方式//同上,初始化纹理glBindTexture(GL_TEXTURE_2D,Tname1);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,64,64,0,GL_RGBA,GL_UNSIGNED_BYTE,T1);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//同上,初始化纹理glBindTexture(GL_TEXTURE_2D,Tname2);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,64,64,0,GL_RGBA,GL_UNSIGNED_BYTE,T2);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);}voiddisplay(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();gluLookAt((GLfloat)X,(GLfloat)Y,(GLfloat)Z,0.0,0.0,0.0,0.0,1.0,0.0);//视图变换//激活纹理对象glActiveTextureARB(GL_TEXTURE0_ARB);//选中号纹理glEnable(GL_TEXTURE_2D);//使纹理可用glBindTexture(GL_TEXTURE_2D,Tname0);//激活纹理glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);//设置纹理贴图方式//绘制正方形glBegin(GL_QUADS);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,0.0);glVertex3f(-4.0,1.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,1.0);glVertex3f(-4.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,1.0);glVertex3f(-2.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,0.0);glVertex3f(-2.0,1.5,0.0);glEnd();glDisable(GL_TEXTURE_2D);//同上,绘制正方形,使用号纹理glActiveTextureARB(GL_TEXTURE1_ARB);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D,Tname1);glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);glBegin(GL_QUADS);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,0.0);glVertex3f(-1.0,1.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,1.0);glVertex3f(-1.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,1.0);glVertex3f(1.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,0.0);glVertex3f(1.0,1.5,0.0);glEnd();glDisable(GL_TEXTURE_2D);//同上,绘制正方形,使用号纹理glActiveTextureARB(GL_TEXTURE2_ARB);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D,Tname2);glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);glBegin(GL_QUADS);glMultiTexCoord2fARB(GL_TEXTURE2_ARB,0.0,0.0);glVertex3f(2.0,1.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE2_ARB,0.0,1.0);glVertex3f(2.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE2_ARB,1.0,1.0);glVertex3f(4.0,3.5,0.0);glMultiTexCoord2fARB(GL_TEXTURE2_ARB,1.0,0.0);glVertex3f(4.0,1.5,0.0);glEnd();glDisable(GL_TEXTURE_2D);//同上,绘制正方形,使用号和号纹理glActiveTextureARB(GL_TEXTURE0_ARB);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D,Tname0);glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);glActiveTextureARB(GL_TEXTURE1_ARB);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D,Tname1);glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);glBegin(GL_QUADS);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,0.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,0.0);glVertex3f(-2.5,-1.0,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,1.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,1.0);glVertex3f(-2.5,1.0,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,1.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,1.0);glVertex3f(-0.5,1.0,0.0);glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,0.0);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,0.0);g
本文标题:OpenGL纹理贴图简单例子
链接地址:https://www.777doc.com/doc-5666811 .html