openGL纹理绘制

#include <stdlib.h>
#include <GL/glut.h> 
#define imageWidth 64
#define imageHeight 64
GLubyte image[imageWidth][imageHeight][3];

/*绘制一个简单的二维纹理图*/
void makeImage(void)
{
	int i, j, r, g, b;

	/*根据点的位置设置不同的颜色*/
	for (i = 0; i < imageWidth; i++)
	{
		for (j = 0; j <imageHeight; j++)
		{
			r = (i*j) % 255;
			g = (i*i) % 255;
			b = (j*j) % 255;

			image[i][j][0] = (GLubyte)b;
			image[i][j][1] = (GLubyte)g;
			image[i][j][2] = (GLubyte)r;
		}
	}
}

void myInit(void)
{
	glClearColor(0.0, 0.0, 0.0, 0.0);

	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LESS);
	makeImage();

	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	/*指定二维纹理映射*/
	glTexImage2D(GL_TEXTURE_2D, 0, 3, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &image[0][0][0]);

	/*设置纹理参数*/
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

	/*设置纹理环境参数*/
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

	glEnable(GL_TEXTURE_2D);
	glShadeModel(GL_FLAT);
}

void myDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	/*将纹理映射到四边形上*/
	glBegin(GL_QUADS);
	/*纹理的坐标和四边形顶点的对应*/
	glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0);
	glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0);
	glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0);
	glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0);
	glEnd();

	glFlush();
}

void myReshape(int w, int h)
{
	glViewport(0, 0, (GLsizei)w, (GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	//glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	gluPerspective(80.0, 1.0 - (GLfloat)w / (GLfloat)h, 1.0, 30.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

int main(int argc, char **argv)
{
	/*初始化*/
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(300, 300);
	glutInitWindowPosition(200, 200);

	/*创建窗口*/
	glutCreateWindow(" Texture ");

	/*绘制与显示*/
	myInit();
	glutReshapeFunc(myReshape);
	glutDisplayFunc(myDisplay);

	glutMainLoop();
	return 0;
}

运行结果:



FR:海涛高软(hunk Xu)
QQ技术交流群:386476712

猜你喜欢

转载自blog.csdn.net/qq_15267341/article/details/83272990