【问题标题】:Transforming normals from worldspace to the viewspace将法线从世界空间转换到视图空间
【发布时间】:2014-04-06 10:09:21
【问题描述】:

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

【问题讨论】:

  • 你如何可视化你的法线?如果你只是做一些像out_color.rgb=normal 这样的事情,你法线的所有负分量都将被限制为 0。

标签: opengl graphics


【解决方案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 只是透视矩阵(用于渲染...)

    您可以通过将其12,13,14 元素设置为零来制作任何原点为(0,0,0) 的矩阵(元素为0,..,15

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

【讨论】:

  • 您的矩阵乘法是反向的或转置的。计算机图形学中通常的表示法是向量是列,矩阵乘法是从右到左(矩阵乘法是不可交换的)。
  • 哦,你是对的......我的错误(我有点病,所以我想念它)......它应该是相反的(因为我也使用它)我会编辑它而...... . thx 指出元素 12,13,14 保持原样(在以前的情况下它将是 4,8,12)
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 2012-12-28
  • 2013-04-22
  • 2021-10-04
  • 2019-10-26
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多