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();
}
예제 #2
0
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();
}