#define GLUT_DISABLE_ATEXIT_HACK
#include <GL/glut.h>
#pragma comment(lib, "glut32.lib")
#define WIDTH 64
#define HEIGHT 64
GLubyte Image[HEIGHT][WIDTH][4];
GLfloat xRot;
GLuint texture;
void makeImage(void)
{
int i, j, c;
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
c = ((((i & 0x8) == 0) ^ ((j & 0x8)) == 0)) * 255;
Image[i][j][0] = (GLubyte) c;
Image[i][j][1] = (GLubyte) c;
Image[i][j][2] = (GLubyte) c;
Image[i][j][3] = (GLubyte) 255;
}
}
}
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
makeImage();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
//glGenTextures(1, &texture);
//if (0 != texture)
//{
// glBindTexture(GL_TEXTURE_2D, texture);
//}
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);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, Image);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); //设置纹理环境
glEnable(GL_TEXTURE_2D); //启用二维纹理
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
//if (0 != texture)
//{
// glBindTexture(GL_TEXTURE_2D, texture);
//}
glPushMatrix();
{
glColor4f(0.0, 1.0, 0.0, 1.0);
glTranslatef(0.0, 0.0,-6.0);
glRotatef(xRot,1,0,0);
glBegin(GL_QUADS); //指定纹理坐标
{
glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -2.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 2.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(2.0, 2.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(2.0, -2.0, 0.0);
}
glEnd();
}
glPopMatrix();
glFlush();
}
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();
}
void OnTimer(int value)
{
xRot++; //旋转角度增量
glutPostRedisplay();
glutTimerFunc(10, OnTimer, 1);
}
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(10,OnTimer,1);
glutMainLoop();
}