相机的 OpenGL 问题(?)
OpenGL Issue with Camera(?)
我正在学习 OpenGL,我的程序有问题,我应该在其中制作太阳系。
首先,这是我用来设置 ModelView 矩阵的代码:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(20, 1, 0, 0);
glTranslatef(0, -20, -60);
然后我用线环画出轨道,太阳是一个 gluSphere:
glPushMatrix();
glColor3f(1, 0.4f, 0);
glTranslatef(0, -2, 0);
gluSphere(gluNewQuadric(), 4, 30, 30);
glPopMatrix();
结果如下:
但是,当我 "zoom in" 使用此代码时:
if (key=='w')
{
glTranslatef(0, 1, 2.4);
}
else if (key=='s')
{
glTranslatef(0, -1, -2.4);
}
发生这种情况:
线留在球体前面。我知道这可能是我在做的愚蠢的事情,但我才刚刚开始学习,这真的让我慢下来了……
谢谢!
您可能没有开启深度测试。
glEnable(GL_DEPTH_TEST);
您可能还需要 fiddle 深度测试参数,但通常默认设置就足够了。
glDepthfunc(GL_LESS);
我也想借此机会强烈建议您停止使用 OpenGL 的立即模式和 OpenGL 的固定功能管道,learn Modern OpenGL。
我正在学习 OpenGL,我的程序有问题,我应该在其中制作太阳系。
首先,这是我用来设置 ModelView 矩阵的代码:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(20, 1, 0, 0);
glTranslatef(0, -20, -60);
然后我用线环画出轨道,太阳是一个 gluSphere:
glPushMatrix();
glColor3f(1, 0.4f, 0);
glTranslatef(0, -2, 0);
gluSphere(gluNewQuadric(), 4, 30, 30);
glPopMatrix();
结果如下:
但是,当我 "zoom in" 使用此代码时:
if (key=='w')
{
glTranslatef(0, 1, 2.4);
}
else if (key=='s')
{
glTranslatef(0, -1, -2.4);
}
发生这种情况:
线留在球体前面。我知道这可能是我在做的愚蠢的事情,但我才刚刚开始学习,这真的让我慢下来了…… 谢谢!
您可能没有开启深度测试。
glEnable(GL_DEPTH_TEST);
您可能还需要 fiddle 深度测试参数,但通常默认设置就足够了。
glDepthfunc(GL_LESS);
我也想借此机会强烈建议您停止使用 OpenGL 的立即模式和 OpenGL 的固定功能管道,learn Modern OpenGL。