旋转opengl时只看到对象的一半

时间:2017-10-14 14:35:36

标签: opengl rotation geometry orthographic

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:0)

由于你的正投影中近平面为0,我认为,圆的一半被近平面夹住。

投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼睛空间转换到剪辑空间,并且通过用剪辑坐标的w分量进行划分,将剪辑空间中的坐标转换为规范化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。 NDC之外的每个几何体都被剪裁 在Orthographic Projection中,眼睛空间中的坐标线性映射到标准化设备坐标。

enter image description here

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

far