旋转opengl时只看到一半的物体

seeing only half of the object when rotating opengl

我试图用 OpenGL 旋转一个圆,但旋转时只显示了一半的圆。我猜 init() 有问题。这是代码:

float angle = 0.0f;

void display(void)
{

    glClearColor(1.0f, 1.0f, 1.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glColor3f(0.0, 0.0, 0.0);
    glPushMatrix();
    //glTranslatef(x, y, 0);    // Move circle to desired location.
    glRotatef(angle, 0, 0, 1);
    drawCircle(10.0, 50.0);

    glPopMatrix();

    glutSwapBuffers();
}

void timer(int val)
{
    angle += 0.5f;
    glutTimerFunc(val, timer, val);
    glutPostRedisplay();
}

void init()
{
    glEnable(GL_DEPTH_TEST);

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-15.0, 15.0, -15.0, 15.0, 0.0, 200);
    }

int main(int argc, char **argv)
{
    ..
    glutDisplayFunc(display);

    glutTimerFunc(10, timer, 10);

    init();
    glutMainLoop();
    return 0;
}

由于在您的正交投影中近平面为 0,我假设圆的一半被近平面裁剪。

投影矩阵描述了从场景的 3D 点到视口的 2D 点的映射。它从眼睛 space 变换到剪辑 space,并且剪辑 space 中的坐标通过除以剪辑坐标。 NDC 的范围是 (-1,-1,-1) 到 (1,1,1)。 NDC 之外的每个几何体都会被剪裁。
在正交投影中,眼睛中的坐标 space 线性映射到归一化设备坐标。

这意味着,长方体中的所有几何体,由 leftrightbottomtopnearfar,绘制在视口上。如果几何图形不在近平面和远平面之间,则不会绘制。你必须以那种方式选择近处和远方的计划,所有的几何图形都在两者之间。 leftrightbottomtopnearfar 的值由 glOrtho 设置。像这样调整您的代码:

glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);