10

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

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

在此处输入图像描述

我在寻找什么转变?怎么计算呢?

我需要它来获得一些屏幕空间效果。

4

3 回答 3

1

您正在寻找基于基础的转换矩阵。关于如何计算这个矩阵的步骤有相当不错的视频。查看KhanAcademy 视频

编辑

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

于 2013-01-14T13:41:23.270 回答
1

在将法线从模型(到视图)空间转换时尝试像往常一样做 - 使用逆转置矩阵。

于 2013-01-14T13:52:01.653 回答
1

假设您想用任意 4x4 矩阵变换点 P 处的法线 N。让我们用模型部分 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)

这是未经测试和验证的,但我认为鉴于这个问题缺乏积极的答案,我会试一试;)

于 2017-08-15T22:41:38.930 回答