将法线从世界空间转换为视图空间

时间:2014-04-06 10:09:22

标签: opengl graphics

假设我在worldspace中有法线,我想将它们转换为视图空间。我该怎么办?我已经尝试通过viewProjection矩阵和反向变换的视图矩阵将它们相乘,但两者都不起作用。蓝色通道(z轴)似乎缺失。我很迷惑。 enter image description here

1 个答案:

答案 0 :(得分:1)

    固定管道上的
  1. 无需为您完成任务

    要正常工作所有世界/对象变换应该在模型视图矩阵内,否则一些高级的东西,如 FOG 将无法正常工作(即GL_PROJECTION矩阵滥用)但在大多数情况下你不会看到一件事......

  2. 在着色器上你可以处理自己的照明,这就是这种方式

    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
    


    object_2_world_matrix是表示渲染模型空间的变换矩阵
    world_2_camera_matrix是表示相机空间的反转变换矩阵 Z轴通常是观察方向
    projection_matrix只是透视矩阵(用于渲染......)

    通过将(0,0,0)元素设置为零(元素为12,13,14

  3. ,您可以制作任何带有0,..,15的矩阵

    你没有删除将法线向量转换为顶点位置的矩阵位置......这就是奇怪的原因......所以要么从结果中减去矩阵的偏移量,要么乘以没有偏移量的矩阵({{1} })