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