我认为您的问题来自“视图空间”与“投影后空间”的混淆。他们不一样。
视图空间或相机空间是场景相对于相机的空间。因此,相机位于原点,向下看 -Z 轴,+Y 向上。在 OpenGL 固定函数方面,相机空间是位置和法线乘以GL_MODELVIEW
矩阵后的空间。
投影后空间是将相机空间值乘以 GL_PROJECTION
矩阵后得到的空间。这实际上就是为什么有两个单独的矩阵。您在相机空间中进行照明,然后将投影后位置发送出去进行光栅化。
OpenGL 不在投影后空间中进行光照。因此纵横比、相机变焦等不会影响照明。观点也没有分歧。
OpenGL 固定功能管道是否计算视图空间中的照明?
是的,你也应该这样做。
如果答案是肯定的,那么它如何应对不均匀比例的视图转换?实际上,它如何应对包含任何比例的视图转换?
与处理包含比例的模型到世界转换的方式完全相同。
这只是一个矩阵。数学既不知道也不关心特定比例变换发生在哪里,无论是在模型到世界的部分还是在世界到相机的部分。重要的是存在规模。或倾斜或任何其他形式的变换。
请记住:模型到世界的变换比世界到相机的变换更可能使用比例。您更有可能需要重新调整几何形状以适应世界,而不是需要重新调整相机矩阵的几何形状。相机缩放、纵横比等的缩放是透视矩阵的一部分,而不是相机矩阵。
它以通常的方式“处理”这个问题:法线通过模型到视图矩阵的反转置进行转换。这会改变法线(完全披露:这是我的电子书教程),因此它们在缩放后仍然适合模型。无论您在哪个空间,这都是必要的。
如果这是真的,那么缩放视图空间将导致不同的光到顶点的距离,这意味着点光源的光照强度将随着视图矩阵的缩放而改变。
... 和?由于所有对象都由相同的相机矩阵转换(在单个场景中),因此所有对象都将应用相同的比例。因此,如果它们在世界空间中都处于相同的比例,那么它们在相机空间中也将处于相同的比例。
所以有什么问题?是的,衰减会发生变化,但它对所有对象的变化都是一样的。因此,只要您的衰减因子是针对此相机空间设计的,就没有问题。