围绕世界0,0,0旋转,而不是以物体为中心

Rotating around world 0,0,0 instead of object center

本文关键字:为中心 世界 旋转      更新时间:2023-10-16

我的对象围绕0,0,0旋转,但我希望它在y轴上围绕自身旋转。我知道还有其他的情况

在OpenGL中围绕自身旋转对象

glRotatef没有按预期旋转

但是我在旋转之前没有任何平移但是它仍然不起作用

My EDITED Code:

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();

My Original Code:

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();

确保对象的中心位于其本地坐标系的原点。

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