C++ 为什么我们要在OpenGL管道中的片段阶段使用眼睛空间坐标?
我目前正在编程一个小型3D引擎,我想知道为什么我应该在片段着色器中使用眼睛空间坐标。要做到这一点,我必须把我的相机矩阵放在一个统一的坐标系中,以转换眼睛坐标系中的光线位置,把相机矩阵放在眼睛坐标系中的光线方向C++ 为什么我们要在OpenGL管道中的片段阶段使用眼睛空间坐标?,c++,opengl,shader,C++,Opengl,Shader,我目前正在编程一个小型3D引擎,我想知道为什么我应该在片段着色器中使用眼睛空间坐标。要做到这一点,我必须把我的相机矩阵放在一个统一的坐标系中,以转换眼睛坐标系中的光线位置,把相机矩阵放在眼睛坐标系中的光线方向 为什么每个人都使用这些坐标?我看不出有什么好处。您不必向着色器提供摄影机矩阵,也不必在那里进行灯光位置和方向变换。实际上,这样做效率很低,因为对于每个顶点,对同一个数字反复执行相同的操作 只需在CPU端变换灯光位置和方向,并将容易变换的灯光参数提供给着色器。然而,在眼睛空间中,照明计算仍然
为什么每个人都使用这些坐标?我看不出有什么好处。您不必向着色器提供摄影机矩阵,也不必在那里进行灯光位置和方向变换。实际上,这样做效率很低,因为对于每个顶点,对同一个数字反复执行相同的操作
只需在CPU端变换灯光位置和方向,并将容易变换的灯光参数提供给着色器。然而,在眼睛空间中,照明计算仍然更加简洁,特别是在涉及法线贴图的情况下。但无论如何,您都必须将所有内容转换为眼睛空间,因为透视变换不会转换法线(尽管顶点位置可以直接转换为剪辑空间)。使用眼睛空间的原因有几个: