所以,我已经在我的 OpenGL 学习任务中获得了基本的光照。
想象一下这个最简单的光照模型。每个顶点都有一个位置、颜色和法线。着色器获取计算为(MV -1 ) T的 ModelViewProjection 矩阵 ( MVP )、Modelview 矩阵 ( MV ) 和法线矩阵 ( N ) ,以及作为制服的LightColor和LightDirection。顶点着色器执行光照计算——片段着色器只输出插值的颜色。
现在,在我遇到的关于这个主题的每个教程中,我看到了两件让我困惑的事情。首先,LightDirection已经假设在眼睛坐标中。其次,输出颜色计算为
max(0, dot(LightDirection, N * normal))*LightColor*Color;
我希望LightDirection应该首先反转,也就是说,我认为正确的公式是
max(0, dot(-LightDirection, N * normal))*LightColor*Color;
似乎假设LightDirection实际上是实际光流的向量的倒数。
Q1:这是某种既定惯例,即该模型中的LightDirection被假定为指向无限远光源的矢量,而不是光方向的矢量,或者这不是主要问题,只是碰巧在我遇到的教程是这么假设的?
Q2:如果LightDirection是世界坐标而不是眼睛坐标,应该用法线矩阵还是模型视图矩阵转换为眼睛坐标?
感谢您澄清这些事情!