OpenGL似乎正在使用(过于激进)视锥剔除,而我看不到如何修改

时间:2019-07-13 17:45:27

标签: c++ opengl opengl-compat glfrustum

我正在尝试让OpenGL应用程序在c ++中工作。 OpenGL似乎正在淘汰远近的物体。

enter image description here

屏幕截图应该是正方形瓷砖的负载,但是不会渲染距离相机太近或太远的正方形。这意味着实际上只绘制了一个狭窄的正方形带(在我认为是近与远平面之间)。

我没有使用视锥剔除,我启用的唯一剔除是背面剔除。默认情况下,OpenGL是否进行了某种类型的视锥剔除?是否需要启用glEnable才能使所有三角形真正渲染?启用GL_DEPTH_TEST绝对可以阻止渲染后的所有操作,无论之后是否调用glFrustum(...)。

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该在代码中的某些地方初始化projectionMatrix:

auto projectionMatrix = glm::mat4 perspective(fovy, aspect, zNear, zFar);

auto projectionMatrix = gluPerspective(fovy, aspect, near, far); 

类似上面的行。 zNear和zFar指定您的平截头体的下边界和最远边界。选择值会将您的片段位置映射到[-1,+1]。

每个带有z == near的片段都将被映射为-1。深度小于近于一切的一切都将被丢弃。

尝试查找较近和较远的参数,并将其值更改为适合您的场景的参数。避免将0设为接近值,您也可以尝试移动相机以查看发生的变化。

答案 1 :(得分:0)

已修复。不知道为什么,但仅渲染其世界坐标(相对于相对于摄影机的坐标)在1到-1之间的三角形。通过使用gluPerspective()而不是glMatrixMode(GL_PROJECTION)后跟glFrustum(...)调用进行修复。

对于为什么它没有损坏,仍然没有一个更明智的选择,但是至少它现在可以正常工作了:)