Opengl 将法线从世界空间转换到视图空间
假设我的法线在世界空间中,我想将它们转换为视图空间。我该怎么办?我已经尝试过用viewProjection矩阵和逆变换的ViewMatrix将它们相乘,但两者都不起作用。蓝色通道(z轴)似乎缺失。我很困惑。Opengl 将法线从世界空间转换到视图空间,opengl,graphics,Opengl,Graphics,假设我的法线在世界空间中,我想将它们转换为视图空间。我该怎么办?我已经尝试过用viewProjection矩阵和逆变换的ViewMatrix将它们相乘,但两者都不起作用。蓝色通道(z轴)似乎缺失。我很困惑。 在固定管道上什么都不做它为您工作 要正常工作,所有世界/对象变换都应该在modelview矩阵中,否则一些高级的东西,如FOG将无法正常工作(即GL_投影矩阵滥用),但在大多数情况下,您看不到任何东西 在着色器上,您可以自行处理照明,因此这是一种方法 point' = object_2_
GL_投影
矩阵滥用),但在大多数情况下,您看不到任何东西point' = object_2_world_matrix * world_2_camera_matrix * projection_matrix * point
vector' = object_2_world_matrix(with origin 0,0,0) * world_2_camera_matrix(with origin 0,0,0) * vector
对象世界矩阵
是表示渲染模型空间的变换矩阵
world\u 2\u camera\u矩阵
是表示摄像机空间的逆变换矩阵
Z轴通常是视图方向
投影矩阵
只是透视矩阵(用于渲染…)
通过将其12,13,14
元素设置为零(元素为0、…、15),可以创建原点为(0,0,0)
的任何矩阵
您并没有删除将法向量转换为顶点位置的矩阵位置。。。这就是奇怪的原因。。。因此,要么从结果中减去矩阵的偏移量,要么用不带偏移量的矩阵相乘(
origin=(0,0,0)
)你的矩阵乘法是反向的或转置的。计算机图形学中常用的表示法是向量是列,矩阵乘法是从右到左(矩阵乘法是非交换的)。。。我的错误(我有点病,所以我错过了)。。。它应该是反向的(因为我也使用它),我会在。。。thx指出元素12,13,14保持原样(在前面的例子中是4,8,12),你如何可视化你的法线?如果你只是做一些事情,比如out\u color.rgb=normal
,法线的所有负分量都将被钳制为0。