坐标系¶
在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值表示 深度 ,是非线性的。更接近近平面的精度更高。
剪辑空间在 着色器 当需要采样或操纵器时 深度 现场信息。