2013-01-14 96 views
6

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

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

enter image description here

我在找什么转变?如何计算它?

我需要一些屏幕空间效果。

回答

-1

您正在寻找基于尊重的变换矩阵。关于如何计算这个矩阵的步骤有非常好的视频。检查KhanAcademy video

编辑

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

+0

我知道如何将法线从切线空间转换到物体空间或世界空间,或反之亦然。虽然 – user1282931

+0

但是这不包括屏幕空间但是如何将一些对象的法线连接到屏幕空间..?法线总是正常的,从哪个点看他们并不重要.. – Sorceror

0

尝试按照通常在从模型(查看)空间转换法线时完成的操作 - 使用逆转换矩阵。

+1

这不包括我的问题。这是关于正常转换眼球空间。这不是关于投影 – user1282931

+1

是的,我看到它并不那么简单。在你的情况下,正常转换的结果取决于具有这种正常表面的**位置** ... – kerim

+0

@ user1282931 - 你可以在眼睛空间中执行屏幕空间效果吗?确切地说 - 每个法向矢量的起点影响结果!不,我不能在眼睛空间里表演。我需要根据屏幕空间normalvector – kerim

0

假设您想要通过任意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) 

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

相关问题