0

OpenGL 固定功能管道是否计算视图空间中的照明?

如果答案是肯定的,那么它如何应对不均匀比例的视图转换?实际上,它如何应对包含任何比例的视图转换?

如果这是真的,那么缩放视图空间将导致不同的光到顶点的距离,这意味着点光源的光照强度将随着视图矩阵的缩放而改变。

世界空间中的照明将使计算的点光强度独立于视图空间缩放,但需要:

  1. 将对象到世界矩阵提供给 API(例如在 DirectX 中,在世界空间中指定灯光位置)。
  2. 绘图时 API 将所有几何图形转换两次。一次通过 world*view*proj 进入剪辑空间,然后再次通过 world,以计算世界空间中顶点的光照。

获得好的答案以及您可以在一般固定功能照明管道上挖掘的任何其他背景信息可获得积分。

4

1 回答 1

4

我认为您的问题来自“视图空间”与“投影后空间”的混淆。他们一样。

视图空间或相机空间是场景相对于相机的空间。因此,相机位于原点,向下看 -Z 轴,+Y 向上。在 OpenGL 固定函数方面,相机空间是位置和法线乘以GL_MODELVIEW矩阵后的空间。

投影后空间是将相机空间值乘以 GL_PROJECTION矩阵后得到的空间。这实际上就是为什么有两个单独的矩阵。您在相机空间中进行照明,然后将投影后位置发送出去进行光栅化。

OpenGL 不在投影后空间中进行光照。因此纵横比、相机变焦等不会影响照明。观点也没有分歧。

OpenGL 固定功能管道是否计算视图空间中的照明?

是的,你也应该这样做。

如果答案是肯定的,那么它如何应对不均匀比例的视图转换?实际上,它如何应对包含任何比例的视图转换?

与处理包含比例的模型到世界转换的方式完全相同。

这只是一个矩阵。数学既不知道也不关心特定比例变换发生在哪里,无论是在模型到世界的部分还是在世界到相机的部分。重要的是存在规模。或倾斜或任何其他形式的变换。

请记住:模型到世界的变换比世界到相机的变换更可能使用比例您更有可能需要重新调整几何形状以适应世界,而不是需要重新调整相机矩阵的几何形状。相机缩放、纵横比等的缩放是透视矩阵的一部分,而不是相机矩阵。

它以通常的方式“处理”这个问题:法线通过模型到视图矩阵的反转置进行转换。这会改变法线(完全披露:这是我的电子书教程),因此它们在缩放后仍然适合模型。无论您在哪个空间,这都是必要的。

如果这是真的,那么缩放视图空间将导致不同的光到顶点的距离,这意味着点光源的光照强度将随着视图矩阵的缩放而改变。

... 和?由于所有对象都由相同的相机矩阵转换(在单个场景中),因此所有对象都将应用相同的比例。因此,如果它们在世界空间中都处于相同的比例,那么它们在相机空间中也将处于相同的比例。

所以有什么问题?是的,衰减会发生变化,但它对所有对象的变化都是一样的。因此,只要您的衰减因子是针对此相机空间设计的,就没有问题。

于 2012-05-31T12:04:14.407 回答