为什么在简单投影之上在OpenGL中使用视锥?

问题描述

为简单起见,我们考虑一个3D场景,其中在应用模型和视图矩阵之后,所有顶点都在立方体[-1,-1,-1] ... [1,1,1]内。

根据下图所示的几何设置,可以得出一个点的投影坐标(X s ,Y s )的公式。在平面z = D上的空间(X,Y,Z):

enter image description here

来自X s / D = X / Z,因此

X s = X /(Z / D),类似 Y s = Y /(Z / D)。

从这里我们可以构造一个齐次坐标(x,y,z,w)=(X,Y,Z,Z / D),当转换回欧几里得空间时,它将给出(X s ,Y s ,D)。

在这种情况下,投影矩阵P就是:

1,0
0,1/D,0

和P *(X,Y,Z,1)=(x,y,z,w)

例如要使z测试保持在片段着色器中,可以通过指定以下内容恢复z信息:

gl_FragDepth = gl_FragCoord.z / gl_FragCoord.w;

上面的代码和矩阵P似乎足以使所有射影几何起作用。

如果可能的话,还可以使用缩放矩阵和P来考虑视口的宽高比,并将原始场景缩放到[-1,-1,-1] ... [1,1]空间

那为什么要使用视锥呢?

平截头体对剪辑空间的变形非常复杂,不需要创建透视图。

是仅模拟具有观察锥的物理相机还是其他原因?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)