首页 > 解决方案 > gluLookAt 不适用于某些参数

问题描述


我正在尝试沿 XYZ 轴移动相机。
为此,我更改了 glulookat 函数中的第三个参数,它的行为很奇怪。

这是我的整个代码:

glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(
    0, 0, 1, //camera pos
    0, 0, 0, //camera target
    0.0, 1.0, 0.0
);

//draw grid

glutSwapBuffers();

如果我写

gluLookAt(
0, 0, 1, //camera pos
0, 0, 0, //camera target
0.0, 1.0, 0.0
);

然后一切正常并绘制网格

但如果我把

gluLookAt(
0, 0, 2, //camera pos
0, 0, 0, //camera target
0.0, 1.0, 0.0
);

然后我看不到网格。

为什么会发生这种情况以及如何摆脱它?

标签: copenglglutopengl-compatglu

解决方案


的第一个参数gluLookAt是相机的位置。当您增加相机和对象之间的距离时,对象会被查看体积的近平面剪裁。

透视投影无效

glFrustum(-100, 100, -100, 100, -100, 100);

因为在透视投影中,到近平面和远平面的距离必须是正数。glFrustum定义了一个视锥体,其中0 < near < far

更改近平面以解决问题。例如:

glFrustum(-100, 100, -100, 100, 0.1, 100); 

推荐阅读