纹理映射示例

来源:互联网 发布:php addslashes缺点 编辑:程序博客网 时间:2024/06/04 19:31

要包含OpenGL的库

#include <GL/glut.h>#include <stdlib.h>#include <stdio.h>#define checkImageWitdth 64#define checkImageHight 64static GLubyte checkImage[checkImageHight][checkImageWitdth][4];static GLuint textName;//产生纹理图像void makeCheakImages(void){int i,j,c;for (i=0;i<checkImageHight;i++){for (j=0;j<checkImageWitdth;j++){c=((((i&0x8)==0)^((j&0x8))==0))*255;if (c==255){checkImage[i][j][0] = (GLubyte)180;checkImage[i][j][1] = (GLubyte)180;checkImage[i][j][2] = (GLubyte)180;checkImage[i][j][3] = (GLubyte)255;}else{checkImage[i][j][0] = (GLubyte)c;checkImage[i][j][1] = (GLubyte)c;checkImage[i][j][2] = (GLubyte)c;checkImage[i][j][3] = (GLubyte)255;}}}}void init(){glClearColor(1,1,1,0);glShadeModel(GL_FLAT);glEnable(GL_DEPTH_TEST);makeCheakImages();glPixelStorei(GL_UNPACK_ALIGNMENT,1);glGenTextures(1,&textName);glBindTexture(GL_TEXTURE_2D,textName);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,checkImageWitdth,checkImageHight,0,GL_RGBA,GL_UNSIGNED_BYTE,checkImage);//控制滤波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_NEAREST);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);}void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);glEnable(GL_TEXTURE_2D);glBegin(GL_QUADS);glTexCoord2f(0,0);glVertex3f(-2.0,-1.0,0);glTexCoord2f(0,1);glVertex3f(-2.0,1.0,0);glTexCoord2f(1,1);glVertex3f(0,1.0,0); glTexCoord2f(1,0);glVertex3f(0,-1.0,0);glTexCoord2f(0,0);glVertex3f(1.0,-1.0,0);glTexCoord2f(0,1);glVertex3f(1.0,1.0,0);glTexCoord2f(1,1);glVertex3f(2.41421,1.0,-1.41421);glTexCoord2f(1,0);glVertex3f(2.41421,-1.0,-1.41421);glEnd();glFlush();glDisable(GL_TEXTURE_2D);}void reshape(int w,int h){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,30.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(0,0,-3.6);}void main(int argc,char ** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500,500);glutInitWindowPosition(100,100);glutCreateWindow("纹理映射示例");init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();}


原创粉丝点击