小编Cur*_*der的帖子

OpenGL-gluPerspective / glFrustum-zNear和zFar问题

我正在编写一个太空探索应用程序。我决定将光年定为单位,并准确地模拟了恒星之间的距离。经过修补和大量艰苦的工作(主要是学习绳索)之后,我从横穿宇宙的飞船的角度使相机正常工作。

最初,我在研究行星对象之前一直不注意gluPerspective()的zNear参数。由于我的缩放单位是光年单位,因此我很快意识到,由于zNear为1.0f,所以我看不到此类对象。经过实验后,我得出了这些数字:

#define POV 45
#define zNear 0.0000001f
#define zFar 100000000.0f
gluPerspective (POV, WinWidth/WinHeight, zNear ,zFar);
Run Code Online (Sandbox Code Playgroud)

这非常有效,因为我能够使我的太阳系巡航(位置0,0,0),并向上移动到看起来明亮且纹理贴图的行星附近。但是,其他系统(不在0,0,0位置)很难通过,因为物体以不寻常的方式从摄像机移开。

但是我注意到,在宇宙中航行时开始出现奇怪的视觉故障。如果我沿Y方向旋转180度,我身后的对象将“环绕”并向前显示,它们也将出现在其原始位置。因此,当在太空中扭曲时,大多数恒星正确地视差,但是有些恒星出现并朝相反的方向行进(至少可以这样打扰)。

通过将zNear更改为0.1f,可以立即纠正所有这些故障(但也无法解决太阳系物体)。所以我被卡住了。我也尝试过使用glFrustum,它会产生完全相同的结果。

我使用以下内容查看世界:

glTranslatef(pos_x, pos_y, pos_z);
Run Code Online (Sandbox Code Playgroud)

带有相关的相机代码以根据需要进行定向。即使禁用相机功能也不会改变任何东西。我什至尝试了gluLookAt()并再次产生相同的结果。

使用极限zNear / zFar值时,gluPerspective()是否有限制?我试图缩小范围,但无济于事。我什至通过缩放所有内容并使用更大的zNear值将世界单位从光年更改为公里,什么也没有。救命!

opengl perspectivecamera visual-glitch

4
推荐指数
1
解决办法
3580
查看次数

标签 统计

opengl ×1

perspectivecamera ×1

visual-glitch ×1