坐标系

在OpenGL、OSG和OSGerath之间,有几个不同的坐标系和参考帧在使用中,有时会混淆哪个是哪个。这里我们将介绍一些基础知识。

OpenScenegraph/OpenGL坐标空间

下面是OpenGL和OSG中使用的各种坐标系的简要说明。更详细的解释(带图片!)我们指导您阅读这篇关于这个主题的优秀教程:

模型坐标

模型(或对象)空间是指几何体中的实际坐标(如地形图、飞机模型等)。在OSG中,模型坐标可以是绝对坐标,也可以用OSG进行转换。 Transform .

我们通常会提到两种类型的模型坐标: 世界地方的 .

世界坐标 用绝对的术语表达;它们不被转换。 局部坐标 已被转换为相对于某个参考点 世界 坐标)。

为什么要使用局部坐标?因为OpenGL硬件只能处理顶点位置的32位值。但是在OSGearth这样的系统中,我们需要用大值表示位置,如果不超过32位精度的限制,我们就无法做到这一点。解决方案是使用 局部坐标 . OSG使用双精度 MatrixTransform 创建一个本地原点(0,0,0),然后我们就可以表达与之相关的数据。

视图坐标

视图空间(有时称为 照相机eye 空间)表示几何体相对于相机本身的位置。相机位于原点(0,0,0),坐标轴为:

+X : Right
+Y : Up
-Z : Forward (direction the camera is looking)

在osgearth中,视图空间在 顶点渲染 --它们在仅限于32位精度的GPU上操作,并且视图空间具有 本地来源 在摄像机前。

剪辑坐标

Clip 坐标是应用视图体积后得到的结果(也称为相机截锥)。截锥体定义了从视点可以看到的范围。生成的坐标在此系统中::

+X : Right
+Y : Up
+Z : Forward

剪辑空间使用四维齐次坐标。剪辑空间中的值范围包含相机截锥,并表示为:

X : [-w..w] (-w = left,   +w = right)
Y : [-w..w] (-w = bottom, +w = top)
Z : [-w..w] (-w = near,   +w = far)
W : perspective divisor

请注意,Z值表示 深度 ,是非线性的。更接近近平面的精度更高。

剪辑空间在 着色器 当需要采样或操纵器时 深度 现场信息。