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

Opengl 将法线从世界空间转换到视图空间,opengl,graphics,Opengl,Graphics,假设我的法线在世界空间中,我想将它们转换为视图空间。我该怎么办?我已经尝试过用viewProjection矩阵和逆变换的ViewMatrix将它们相乘,但两者都不起作用。蓝色通道(z轴)似乎缺失。我很困惑。 在固定管道上什么都不做它为您工作 要正常工作,所有世界/对象变换都应该在modelview矩阵中,否则一些高级的东西,如FOG将无法正常工作(即GL_投影矩阵滥用),但在大多数情况下,您看不到任何东西 在着色器上,您可以自行处理照明,因此这是一种方法 point' = object_2_

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

  • 在固定管道上什么都不做它为您工作

    要正常工作,所有世界/对象变换都应该在modelview矩阵中,否则一些高级的东西,如FOG将无法正常工作(即
    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。