许多计算都在眼睛坐标系中完成,一个常用的就是光照需要在这个空间中实现,因为眼睛位置决定了光照效果,否则的话,很难实现镜面光。因此我们需要将法线坐标转换到眼睛坐标系中。在OpenGL ES 2.0中,将一个顶点转换至眼睛坐标系中,通过:
vertexEyeSpace = view_Matrix * rm_vertex;
那为什么我们不能像法线向量一样做同样的工作呢?首先法线向量是3个floats的向量,而modelView矩阵是4X4的矩阵。这可以通过以下代码来实现:
normalEyeSpace = vec3(view_Matrix * vec4(rm_Normal, 0.0));
它只可用于一些环境中,不能用于所有,但是上面存在一个潜在的问题:
首先看看顶点和法线向量的区别是什么:
顶点是(x,y,z)表示缺省的向量(x,y,z,1);而法线向量是一个方向性向量,没有固定的点。因为法线向量可由法线上两个固定顶点(x1,y1,z1,1), (x2,y2,z2,1)相减得到。因此,从这点就可以看到顶点与法线向量不同,也就造成了不现的变换。法线向量只能保证方向性的一致,不能保证位置性的一致。
潜在的问题是: