我正在尝试使用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 :(得分:0)
由于你的正投影中近平面为0,我认为,圆的一半被近平面夹住。
投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼睛空间转换到剪辑空间,并且通过用剪辑坐标的w
分量进行划分,将剪辑空间中的坐标转换为规范化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。 NDC之外的每个几何体都被剪裁
在Orthographic Projection中,眼睛空间中的坐标线性映射到标准化设备坐标。
这意味着,长方体中的所有几何体都由left
,right
,bottom
,top
,near
和{{1在视口上绘制。如果几何体不在近平面和远平面之间,则不是绘制。您必须以这种方式选择近端和远端计划,所有几何都介于两者之间。 far
,left
,right
,bottom
,top
和near
的值由glOrtho
设置。像这样调整你的代码:
far