文档介绍:#include <>
#include <>
#include <>
#include <gl\>
#include <gl\>
#include <gl\>
HDC hDC=NULL;
HGLRC hRC=NULL;
HWND hWnd=NULL;
HINSTANCE hInstance;
bool keys[256];
bool active=TRUE;
bool fullscreen=TRUE;
GLuint texture[1];
GLuint box; // 保留盒子显示列表
GLuint top; // 保留盒子顶部显示列表
GLuint xloop; // X轴循环变量
GLuint yloop; // Y轴循环变量
GLfloat xrot;
GLfloat yrot;
static GLfloat boxcol[5][3]={
{,,},{,,},{,,},{,,},{,,}
};// 亮:红,橙,黄,绿,蓝
static GLfloat topcol[5][3]={
{.5f,,},{,,},{,,},{,,},{,,}
};// 暗:红,橙,黄,绿,蓝
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc
/*现在正式开始建立显示列表。你可能注意到了,全部发明盒子代码全部在第一个显示列表里,全部发明顶部代码全部在另一个列表里。我会努力解释这些细节。*/
GLvoid BuildLists(){
box=glGenLists(2); // 创建两个显示列表名称
/*开始时候我们告诉OpenGL我们要建立两个显示列表。glGenLists(2)建立了两个显示列表空间,并返回第一个显示列表指针。“box”指向第一个显示列表,任何时候调用“box”第一个显示列表就会显示出来。*/
glNewList(box,GL_COMPILE); // 创建第一个显示列表t
/*现在开始结构第一个显示列表。我们已经申请了两个显示列表空间了,而且有box指针指向第一个显示列表。所以现在我们应该告诉OpenGL要建立什么类型显示列表。
我们用glNewList()命令来做这个事情。你一定注意到了box是第一个参数,这表示OpenGL将把列表存放到box所指向内存空间。第二个参数GL_COMPILE告诉OpenGL我们想预先在内存中结构这个列表,这么每次画时候就无须重新计算怎么结构物体了。
GL_COMPILE类似于编程。在你写程序时候,把它装载到编译器里,你每次运行程序全部需要重新编译。,,不需要编译。当OpenGL编译过显示列表后,就不需要再每次显示时候重新编译它了。这就是为何用显示列表能够加紧速度。*/
glBegin(GL_QUADS);
// Bottom Face
glNormal3f( ,-, );
glTexCoord2f(, ); glVertex3f(-, -, -);
glTexCoord2f(, ); glVertex3f( , -, -);
glTexCoord2f(, ); glVertex3f( , -, );
glTexCoord2f(, ); glVertex3f(-, -, );
// Front Face
glNormal3f( , , );
glTexCoord2f(, ); glVertex3f(-, -, );
glTexCoord2f(, ); glVertex3f( , -, );
glTexCoord2f(,