2017-10-14 68 views
0

我想用OpenGL旋转一个圆形,但旋转时只显示一半的圆形。我猜想init()有什么问题。这里是代码:只看到一半的物体时旋转opengl

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

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

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

enter image description here

这意味着,所有这些是在长方体,由leftrightbottomtopnearfar限定的几何形状,被描绘在视口。如果几何图形不在近平面和远平面之间,则不绘制。您必须以这种方式选择近距离和远距离的平面图,所有几何图形都处于两者之间。 left,right, bottom,top,nearfar的值由glOrtho设置。像这样调整你的代码:

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