OpenGL(ES) – 平截体和正射之间有什么区别?

当我用相同的参数使用它们中的每一个时,我注意到的唯一区别是“摄像机”距离物体有多近。 这里有什么不同,哪个主要是2D游戏的首选?

Solutions Collecting From Web of "OpenGL(ES) – 平截体和正射之间有什么区别?"

我不同意LeffelMania,虽然他的答案已经被接受了,但是我想再次解释一下什么是平截头体,以及正投影和透视投影之间的区别是什么。

平截头体是没有顶部形状的3D对象的金字塔(在由zNear和zFar平面之间的空间定义的链接中)。

视锥体

平截头体是用来确定相机可以看到什么。 所有与相机的视angular相交或相交的视angular必须被渲染,其余的都可以被忽略。

由于平截头体是进行相交检查的困难形状,所以经常构造matrix变换以使视锥体被转换为立方体。 这种matrix变换也适用于所有场景对象,所以我们现在可以做一个简单的“与立方体相交”的检查。 这被称为规范视锥体 ( 详见这里 )

现在关于透视vs正交投影。 在图片中您可以看到相机或投影中心(COP)。 在透视投影中,COP靠近近平面。 远飞机上所有位置的光线都指向了缔约方大会。 在这些光线与近平面(aka viewport)相交的地方,根据最接近光线的近平面的颜色对像素着色。 透视投影导致(多个)消失点和远离相机的物体更小,世界上的平行线也不一定平行于图像。

在正射投影中,COP距离无限远,所以光线几乎相互平行。 没有消失点,更远处的物体不会缩小,世界上的平行线在图像上是平行的。

一般来说,在3D场景中使用Frustum来容纳透视图投影。 它考虑了每个物体与相机的距离以及视angular,以确定物体在屏幕上的大小和位置。 一个正投影只需要把每个对象从画线上画出一条直线,使其成为一个平坦的场景。 这是一个总体概括,关于这个主题还有很多要说的,但是对于一个2D游戏,你会想要使用一个正交投影。