要包含OpenGL的库
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#define checkImageWitdth 64
#define checkImageHight 64
static 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();
}
本文展示了一个使用OpenGL实现纹理映射的示例,包括初始化、纹理生成、显示和渲染过程。
1403

被折叠的 条评论
为什么被折叠?



