void OPENGL_3D_ENGNIE::CreateSignRoadSideShowList() { GLfloat Point1[] = {-0.5f, 0.5f, 0.01f}, Point2[] = {0.5f, 0.5f, 0.01f}, Point3[] = {0.5f, -0.5f, 0.01f}, Point4[] = {-0.5f,-0.5f, 0.01f}, Point5[] = {-0.5f, 0.5f, -0.01f}, Point6[] = {0.5f, 0.5f, -0.01f}, Point7[] = {0.5f, -0.5f, -0.01f}, Point8[] = {-0.5f,-0.5f, -0.01f}; GLfloat ColorR[] = {1, 0, 0,0.5}, ColorY[] = {1, 1, 0,0.5}; SignShowList_roadSide = glGenLists(1); glNewList(SignShowList_roadSide, GL_COMPILE); glBegin(GL_QUADS); // 正面贴图 glTexCoord2f(0.0f, 1.0f); ColoredVertex(ColorR, Point1); glTexCoord2f(1.0f, 1.0f); ColoredVertex(ColorR, Point2); glTexCoord2f(1.0f, 0.0f); ColoredVertex(ColorR, Point3); glTexCoord2f(0.0f, 0.0f); ColoredVertex(ColorR, Point4); // 反面 ColoredVertex(ColorY, Point5); ColoredVertex(ColorY, Point6); ColoredVertex(ColorY, Point7); ColoredVertex(ColorY, Point8); // 侧面 ColoredVertex(ColorR, Point1); ColoredVertex(ColorR, Point4); ColoredVertex(ColorY, Point8); ColoredVertex(ColorY, Point5); ColoredVertex(ColorR, Point1); ColoredVertex(ColorR, Point2); ColoredVertex(ColorY, Point6); ColoredVertex(ColorY, Point5); ColoredVertex(ColorR, Point2); ColoredVertex(ColorR, Point3); ColoredVertex(ColorY, Point7); ColoredVertex(ColorY, Point6); ColoredVertex(ColorR, Point3); ColoredVertex(ColorR, Point4); ColoredVertex(ColorY, Point8); ColoredVertex(ColorY, Point7); glEnd(); glEndList(); }
void myDisplay(void) { static int list = 0; if( list == 0 ) { // 如果显示列表不存在,则创建 /* GLfloat PointA[] = {-0.5, -5*sqrt(5)/48, sqrt(3)/6}, PointB[] = { 0.5, -5*sqrt(5)/48, sqrt(3)/6}, PointC[] = { 0, -5*sqrt(5)/48, -sqrt(3)/3}, PointD[] = { 0, 11*sqrt(6)/48, 0}; */ // 2007年4月27日修改 GLfloat PointA[] = { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6}, PointB[] = {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6}, PointC[] = { 0.0f, -sqrt(6.0f)/12, sqrt(3.0f)/3}, PointD[] = { 0.0f, sqrt(6.0f)/4, 0}; GLfloat ColorR[] = {1, 0, 0}, ColorG[] = {0, 1, 0}, ColorB[] = {0, 0, 1}, ColorY[] = {1, 1, 0}; list = glGenLists(1); glNewList(list, GL_COMPILE); glBegin(GL_TRIANGLES); // 平面ABC ColoredVertex(ColorR, PointA); ColoredVertex(ColorG, PointB); ColoredVertex(ColorB, PointC); // 平面ACD ColoredVertex(ColorR, PointA); ColoredVertex(ColorB, PointC); ColoredVertex(ColorY, PointD); // 平面CBD ColoredVertex(ColorB, PointC); ColoredVertex(ColorG, PointB); ColoredVertex(ColorY, PointD); // 平面BAD ColoredVertex(ColorG, PointB); ColoredVertex(ColorR, PointA); ColoredVertex(ColorY, PointD); glEnd(); glEndList(); glEnable(GL_DEPTH_TEST); } // 已经创建了显示列表,在每次绘制正四面体时将调用它 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle, 1, 0.5, 0); glCallList(list); glPopMatrix(); glutSwapBuffers(); }