纹理映射示例

要包含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();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值