正常的matrix空间必须是眼睛空间?

我在世界空间(而不是在眼睛空间)照明,所以我设置正常matrix如下:

modelProgram->setUniform( "NormalMatrix", inverse(transpose(mat3(modelMatrix))) ); 

现在我注意到,所有的教程都将常规matrix设置为ModelViewmatrix的逆转置。 这也意味着他们在眼睛空间做照明,对吧?

使用正常matrix时,我必须在眼睛空间做照明吗? 如果有关系的话,我其实也会做正常的映射。

由于Phong模型中光照的镜面reflection分量是如何计算的,所以人们常常计算眼睛空间中的光照。 在视图空间中进行计算,可以避免在顶点着色器中进行vector减法,这是基本可以忽略的优化。

如果您是在世界空间中进行计算,而您完全可以,那么您还需要传递给着色器的眼睛方向(或从着色器中的视图matrix计算)。

在世界空间中进行照明当然是可能的,如果你觉得更直观,你应该走这条路。