Answers:
是的,仅举几例:
该Pannini投影,例如,可以捕捉的视在广泛的领域不错的方式。(完全是我的意见)
我认为实施细节将超出此特定问题的范围。
编辑:感谢您的评论,我没有拼写Pannini。为了使此编辑有价值,这里还有更多一些:
这取决于您的意思是“可以在OpenGL等3D系统中使用”。:)
狭义地说,像OpenGL这样的3D图形硬件和API仅能正确处理线性投影-将世界空间中的直线映射到图像上的直线的投影。他们从不将某些东西扭曲成弯曲的形状(除非开始时是弯曲的)。这是因为GPU依赖于具有直边的三角形,以便在屏幕上正确光栅化它们。
如果我们将自己限制为线性投影,则没有太多选择。除了标准的正交和透视图之外,还存在通过剪切视锥面而获得的“偏心”变化。
这些投影可以用普通的4×4投影矩阵表示,并可以毫无问题地用在3D API中。
然后是非线性投影,它没有将直线映射到直线的限制。他们被允许将事物扭曲成曲线。其中有很多,包括圆柱形,球形,各种类型的鱼眼等。
对于非线性投影,您不能简单地使用投影矩阵。您必须以某种方式使用着色器自己实现投影。一种方法是编写自定义顶点着色器以对每个顶点进行投影。GPU仍将在顶点之间用直线绘制三角形,因此,虽然小三角形非常接近正确,但是较大的三角形将明显是错误的。 这可能会导致问题,并且可能需要非常精细地细分几何图形以便正确渲染。
获得非线性投影的第二种方法是先使用常规的透视投影来渲染场景(也许是对每个立方体面都有透视投影的立方体贴图),然后应用后处理像素着色器将其重新采样到所需的颜色非线性投影。这具有不需要修改几何体的优点,但是由于需要额外的渲染工作,因此可能会更加昂贵,并且如果首遍渲染的分辨率不足,则结果在某些区域可能会变得模糊。例如,Oculus Rift游戏使用后处理方法来实现Rift使用其镜头所需的非线性投影。