2013-01-04 85 views
1

我的物体围绕0,0,0旋转,但我希望它在Y轴上围绕自身旋转。 我知道有其他情况下围绕世界0,0,0而不是物体中心旋转

Rotating object around itself in OpenGL

glRotatef not rotating as expected

但我旋转的还是它不工作之前没有任何翻译。

EDITED代码:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glRotatef(_angle,0.0f,1.0f,0.0f); 
glPushMatrix(); 

glTranslatef(0.0f,0.0f,-6.0f); 
glBegin(GL_TRIANGLES); 
    //Front 
    glVertex3f(-1.0f, -1.0f, 1.0f); 
    glVertex3f(-1.0f, 1.0f, 1.0f); 
    glVertex3f(1.0f, 1.0f, 1.0f); 

    glVertex3f(-1.0f, -1.0f, 1.0f); 
    glVertex3f(1.0f, -1.0f, 1.0f); 
    glVertex3f(1.0f, 1.0f, 1.0f); 

    //Back 
    glVertex3f(-1.0f, -1.0f, -1.0f); 
    glVertex3f(-1.0f, 1.0f, -1.0f); 
    glVertex3f(1.0f, 1.0f, -1.0f); 

    glVertex3f(-1.0f, -1.0f, -1.0f); 
    glVertex3f(1.0f, -1.0f, -1.0f); 
    glVertex3f(1.0f, 1.0f, -1.0f); 

    //Right 
    glVertex3f(1.0f, 1.0f, 1.0f); 
    glVertex3f(1.0f, -1.0f, 1.0f); 
    glVertex3f(1.0f, -1.0f, -1.0f); 

    glVertex3f(1.0f, 1.0f, 1.0f); 
    glVertex3f(1.0f, 1.0f, -1.0f); 
    glVertex3f(1.0f, -1.0f, 1.0f); 


    //Left 
    glVertex3f(-1.0f, 1.0f, 1.0f); 
    glVertex3f(-1.0f, -1.0f, 1.0f); 
    glVertex3f(-1.0f, -1.0f, -1.0f); 

    glVertex3f(-1.0f, 1.0f, 1.0f); 
    glVertex3f(-1.0f, 1.0f, -1.0f); 
    glVertex3f(-1.0f, -1.0f, -1.0f); 


    //Top 
    glVertex3f(-1.0f, 1.0f, -1.0f); 
    glVertex3f(-1.0f, 1.0f, 1.0f); 
    glVertex3f(1.0f, 1.0f, 1.0f); 

    glVertex3f(-1.0f, 1.0f, -1.0f); 
    glVertex3f(1.0f, 1.0f, -1.0f); 
    glVertex3f(1.0f, 1.0f, 1.0f); 


    //Bottom 
    glVertex3f(-1.0f, -1.0f, -1.0f); 
    glVertex3f(-1.0f, -1.0f, 1.0f); 
    glVertex3f(1.0f, -1.0f, 1.0f); 

    glVertex3f(-1.0f, -1.0f, -1.0f); 
    glVertex3f(1.0f, -1.0f, -1.0f); 
    glVertex3f(1.0f, -1.0f, 1.0f); 
glEnd(); 
glPopMatrix(); 

glutSwapBuffers(); 

我原来的代码:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); 

glRotatef(angle,0.0f,1.0f,0.0f); //The angle is a float that slowly increases until it reaches 360 Degrees, and then resets to 0.0 
    /* This is a Cube */ 
glBegin(GL_TRIANGLES); 
    //Front 
    glVertex3f(-1.0f, -1.0f, -5.0f); 
    glVertex3f(-1.0f, 1.0f, -5.0f); 
    glVertex3f(1.0f, 1.0f, -5.0f); 

    glVertex3f(-1.0f, -1.0f, -5.0f); 
    glVertex3f(1.0f, -1.0f, -5.0f); 
    glVertex3f(1.0f, 1.0f, -5.0f); 

    //Back 
    glVertex3f(-1.0f, -1.0f, -7.0f); 
    glVertex3f(-1.0f, 1.0f, -7.0f); 
    glVertex3f(1.0f, 1.0f, -7.0f); 

    glVertex3f(-1.0f, -1.0f, -7.0f); 
    glVertex3f(1.0f, -1.0f, -7.0f); 
    glVertex3f(1.0f, 1.0f, -7.0f); 

    //Right 
    glVertex3f(1.0f, 1.0f, -5.0f); 
    glVertex3f(1.0f, -1.0f, -5.0f); 
    glVertex3f(1.0f, -1.0f, -7.0f); 

    glVertex3f(1.0f, 1.0f, -5.0f); 
    glVertex3f(1.0f, 1.0f, -7.0f); 
    glVertex3f(1.0f, -1.0f, -5.0f); 


    //Left 
    glVertex3f(-1.0f, 1.0f, -5.0f); 
    glVertex3f(-1.0f, -1.0f, -5.0f); 
    glVertex3f(-1.0f, -1.0f, -7.0f); 

    glVertex3f(-1.0f, 1.0f, -5.0f); 
    glVertex3f(-1.0f, 1.0f, -7.0f); 
    glVertex3f(-1.0f, -1.0f, -7.0f); 


    //Top 
    glVertex3f(-1.0f, 1.0f, -7.0f); 
    glVertex3f(-1.0f, 1.0f, -5.0f); 
    glVertex3f(1.0f, 1.0f, -5.0f); 

    glVertex3f(-1.0f, 1.0f, -7.0f); 
    glVertex3f(1.0f, 1.0f, -7.0f); 
    glVertex3f(1.0f, 1.0f, -5.0f); 


    //Bottom 
    glVertex3f(-1.0f, -1.0f, -7.0f); 
    glVertex3f(-1.0f, -1.0f, -5.0f); 
    glVertex3f(1.0f, -1.0f, -5.0f); 

    glVertex3f(-1.0f, -1.0f, -7.0f); 
    glVertex3f(1.0f, -1.0f, -7.0f); 
    glVertex3f(1.0f, -1.0f, -5.0f); 
glEnd(); 

glutSwapBuffers(); 
+0

您应该避免使用固定功能管道。 –

回答

2

确保你的对象的中心在其局部坐标系的原点。

对于你的立方体,你的X/Y似乎居中,但你的Z中心看起来是-6。

+0

好的我改变了代码,但它仍然在做同样的事情 – AvidScifiReader

+1

如果你在*旋转前翻译*会怎么样? – genpfault

+2

请注意,由矩阵乘法表示的转换是“向后”,即乘以转换到堆栈上的转换是第一个应用。 – datenwolf