使用"球形截头体"进行3D投影

cre*_*LBO 6 opengl 3d

我目前正在编写从模型空间到剪辑空间的转换,以便在OpenGL中使用.从我所看到的,程序员通常使用传统的矩形平截头体来定义模型空间中的剪裁边界.我个人考虑过像平截头体的形状,除了近平面和远平面是以平截头体(相机)的顶点为中心的球体.所以看起来像这样:

循环部门

黄色区域对应于OpenGL的剪辑空间,并且两个球体(在该横截面图像中描绘为圆圈)对应于OpenGL z=-1(内部球体)和z=1(外部球体).

这是一种更逼真的投影模型,还是在设计投影矩阵时我应该坚持使用传统的矩形平截头体?

use*_*280 1

不,我不确定你说的完全诚实是什么意思,但无论哪种情况都不是。

  • 您的意思是视图坐标(通常是视锥体)应该以球体为边界吗?

好吧,在许多(所有?,大多数?)与剪裁平面相交的大多边形中,实际上会分解为不相交的较小三角形 - 否则,外面有一个顶点的单个大多边形将被忽略。这就是剪辑实际涉及的内容。

还记得当你玩旧游戏并走进物体时,如果你靠得太近,它们就会消失吗?如果当多边形的角正好在视图之外时,洞的东西就消失了,那不是很糟糕吗?请参阅进行澄清。

  • 另一方面,您可能意味着视图空间应该投影到球体而不是平面上。

屏幕是平坦的,因此 3D 场景中的对象被投影到平坦的表面上,相当于追踪从对象到相机的光线并找到它与显示器相交的位置。奇怪的“不现实”3D 外观是由于观看者的眼睛 a) 不是点相机 b) 很少(如果有的话)处于视野的正确距离的结果。