Opengl 使用「;球形平截头体“;用于三维投影

Opengl 使用「;球形平截头体“;用于三维投影,opengl,3d,Opengl,3d,我目前正在编写一个从模型空间到剪辑空间的转换,以便在OpenGL中使用。据我所见,程序员通常使用传统的矩形截头体来定义模型空间中的剪裁边界。我个人的想法是一个类似于平截头体的形状,除了近平面和远平面是以平截头体顶点为中心的球体(相机)。所以看起来是这样的: 黄色区域对应于OpenGL的剪辑空间,两个球体(在此横截面图像中描绘为圆圈)对应于OpenGL的z=-1(内部球体)和z=1(外部球体) 这是一种更现实的投影建模方法,还是在设计投影矩阵时我应该坚持使用传统的矩形平截头体?否。我不确定你完全

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

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


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

否。我不确定你完全诚实的意思,但在任何一种情况下都不是

  • 你的意思是视图坐标(通常是视锥台)应该以球体为边界吗
在许多(所有的,大多数的)与剪辑平面相交的大多边形中,实际上会被分割成更小的三角形,而这些三角形则不会——否则,一个外部有一个顶点的大多边形将被忽略。这就是剪辑实际涉及的内容

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

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

屏幕是平的,因此3d场景中的对象被投影到一个平面上,相当于跟踪一条光线从一个对象到摄像机,并找到它与监视器相交的位置。这种奇怪的“不切实际”3d外观是由于观察者的眼睛是a)不是点相机,b)很少(如果有的话)处于视野的正确距离。

以这种方式定义的区域似乎比通常的平截头体更符合逻辑,因为下一个原因:在广角投影中(比方说90-120度)靠近远平面的物体可能会在旋转相机后消失并突然重新出现。如果从眼睛到对象的距离(欧几里德)介于从眼睛到平截头体远平面中心及其角点的距离之间,则会发生这种情况


球面扇形应该可以消除这个问题。然而,出现了一个新的问题:在屏幕表面投影后,由于深度计算的变化,平面多边形可能会扭曲。虽然我不确定它到底是什么样子。

传统的平截头体是使用投影矩阵和边界的结果,使用圆形平截头体你需要得到欧几里德距离(3个平方和一个求和),数学不是我的问题。我只是想知道这是否是一个真实的投影。如果你在你的图像上添加矩形平截头体的垂直线,你会发现它对小视场来说是一个微小的差异,对大视场来说呢?例如,90º(这是一个典型人的视场)?简言之,这是一个很好的答案,平截头体是平面上的投影,因为屏幕是平面。如果屏幕是弯曲的,则投影到球体/圆环中是很有用的(否则你会看到扰动扰动..看极性失真得到一个创意creXALBO)