void display(void)
{
GLfloat position[] = {0.0, 0.0, 1.5, 1.0};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix();
glTranslatef(0.0, 0.0, -5.0); glPushMatrix();
glRotated((GLdouble)spin, 0.0, 1.0, 0.0);     //
glLightfv(GL_LIGHT0, GL_POSITION, position);  //
glTranslated(0.0, 0.0, 1.5);                  //
glDisable(GL_LIGHTING);                       //  这几个函数的先后顺序是怎样的
glColor3f(0.0, 1.0, 1.0);                     //
glutWireCube(0.1);                            //
glEnable(GL_LIGHTING);                        //
glPopMatrix(); glutSolidTorus(0.275, 0.85, 8, 15);
glPopMatrix(); glFlush();
}

解决方案 »

  1.   

    象是一个立方体绕一个救生圈之类的环在转,按程序中这种压栈后先平移,再旋转的顺序,立方体已经不是自转了,而是绕着某个东东转,出栈后又有一个Torus,那就是绕着它了
      

  2.   

    void display(void)
    {
    GLfloat position[] = {0.0, 0.0, 1.5, 1.0};
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();
    glTranslatef(0.0, 0.0, -5.0);glPushMatrix();//将要保存的变换矩阵压栈
    glRotated((GLdouble)spin, 0.0, 1.0, 0.0); //设置矩阵,绕(0,1,0)向量旋转spin弧度。
    glLightfv(GL_LIGHT0, GL_POSITION, position); //设置第0个光源的位置
    glTranslated(0.0, 0.0, 1.5); //设置矩阵,在之前的旋转叠加上平移,沿着向量(0,0,1.5)平移
    //////////////////////////////////////////////////////////
    glDisable(GL_LIGHTING); // 取消灯光设置。
    glColor3f(0.0, 1.0, 1.0); //设置当前的颜色
    glutWireCube(0.1); //绘制立方体。由于取消了灯光,于是这个立方体不受灯光的影响。
    /////////////////////////////////////////////////////
    glEnable(GL_LIGHTING); //打开灯光
    glPopMatrix();//还原之前保存的矩阵glutSolidTorus(0.275, 0.85, 8, 15);
    glPopMatrix();glFlush();
    }
      

  3.   

    楼上的不要误导啊,opengl矩阵操作顺序是离绘制物体越近的越先执行,所以上面的代码是先平移再旋转,你不要以为是先旋转再平移,严重的误人子弟
      

  4.   

    csdn交流的平台,怎么可能所有的回复保证都是正确的?!
    我是错了,我承认,到道歉。
    但是说我误人子弟,我很不服气。