将世界空间法线转换为屏幕空间法线

时间:2013-01-14 11:10:28

标签: 3d transformation space projection normals

将世界空间中定义的曲面法线转换为屏幕空间中的法线的正确方法是什么?我不认为它们可以简单地乘以投影矩阵,因为透视划分将事物转换为剪辑空间,据我所知,在这个空间中,与图像平面共面的平面仍然是共面的。

但我正在寻找的变换应该会导致变换法线,使得图形A中描绘的蓝色世界法线应该导致不同的屏幕空间法线(因为即使它们的平面与图像平面共面,它们也会不要面对相机) - 另一方面,图形B中描绘的法线应该在变换之后(或多或少)相等,因为它们的表面面向相机。

enter image description here

我在寻找什么转型?如何计算?

我需要这个用于屏幕空间效果。

3 个答案:

答案 0 :(得分:0)

您正在寻找与基础相关的转型矩阵。有很多关于如何计算这个矩阵的步骤的视频。检查KhanAcademy video

修改

您没有提供有关您使用的技术的任何信息(OGL,DX,着色器,自己的投影......),但您一定要阅读一些关于切线空间的文章,例如: Messing with Tangent Space ..

答案 1 :(得分:0)

尝试按照通常使用反转置矩阵从法模(到视图)空间转换法线时这样做。

答案 2 :(得分:0)

假设您想要将点P处的法线N转换为任意4x4矩阵。让我们用模型部分T(具有旋转,缩放和平移)表示矩阵,将最后一行的部分表示为W.这允许我们说:

Transform(P) = (T * P) / dot(W,P)

现在,预测的法线可以看作是:

的极限(d - > 0)
(Transform(P+dN) - Transform(P)) / d

扩展这个等式,然后划掉" d"从提名者和分母中得出这个公式:

dot(W,N) * (Transform(N) - Transform(P)) / dot(W,P)

这是未经测试和未经证实的,但我认为由于缺乏对这个问题的正面答案,我给它一个镜头;)