旋转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 线性映射到归一化设备坐标。
这意味着,长方体中的所有几何体,由 left
、right
、bottom
、top
、near
和 far
,绘制在视口上。如果几何图形不在近平面和远平面之间,则不会绘制。你必须以那种方式选择近处和远方的计划,所有的几何图形都在两者之间。 left
、right
、bottom
、top
、near
和 far
的值由 glOrtho
设置。像这样调整您的代码:
glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);
我试图用 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 线性映射到归一化设备坐标。
这意味着,长方体中的所有几何体,由 left
、right
、bottom
、top
、near
和 far
,绘制在视口上。如果几何图形不在近平面和远平面之间,则不会绘制。你必须以那种方式选择近处和远方的计划,所有的几何图形都在两者之间。 left
、right
、bottom
、top
、near
和 far
的值由 glOrtho
设置。像这样调整您的代码:
glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);