【发布时间】:2014-04-06 10:09:21
【问题描述】:
假设我在世界空间中有法线,我想将它们转换为视图空间。我该怎么办?我已经尝试将它们乘以 viewProjection 矩阵和逆变换的视图矩阵,但两者都不起作用。蓝色通道(z 轴)似乎缺失。我很困惑。
【问题讨论】:
-
你如何可视化你的法线?如果你只是做一些像
out_color.rgb=normal这样的事情,你法线的所有负分量都将被限制为 0。
假设我在世界空间中有法线,我想将它们转换为视图空间。我该怎么办?我已经尝试将它们乘以 viewProjection 矩阵和逆变换的视图矩阵,但两者都不起作用。蓝色通道(z 轴)似乎缺失。我很困惑。
【问题讨论】:
out_color.rgb=normal 这样的事情,你法线的所有负分量都将被限制为 0。
在固定管道上什么都不做,它为您工作
要正常工作,所有世界/对象变换都应该在模型视图矩阵内,否则像 FOG 之类的一些高级事物将无法正常工作(即GL_PROJECTION 矩阵滥用),但在大多数情况下,您看不到东西……
在着色器上,您可以处理自己的光照,所以这就是方式
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))
【讨论】: