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

3d 将世界空间法线转换为屏幕空间法线,3d,transformation,space,projection,normals,3d,Transformation,Space,Projection,Normals,将世界空间中定义的曲面法线转换为屏幕空间中的法线的正确方法是什么?我不认为它们可以简单地乘以投影矩阵,因为透视分割将事物转换为剪辑空间,据我所知,在这个空间中,与图像平面共面的平面保持共面 但是我正在寻找的变换应该会产生变换后的法线,这样图A中描绘的蓝色世界法线应该会产生不同的屏幕空间法线(因为,即使它们的平面与图像平面共面,它们也不会面向相机)-另一方面,图形B中描绘的法线在变换后应(或多或少)相等,因为它们的表面面向相机 我在寻找什么样的转变?如何计算呢 我需要这个来获得一些屏幕空间效果。

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

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

我在寻找什么样的转变?如何计算呢


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

您正在寻找关于基的变换矩阵。有一段关于如何计算这个矩阵的很好的视频。检查

编辑


您没有提供任何有关您使用的技术的信息(OGL、DX、着色器、自身投影等),但您肯定应该阅读一些关于切线空间的文章,例如…

尝试像通常一样将法线从模型转换为视图空间-使用逆转置矩阵。

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

Transform(P) = (T * P) / dot(W,P)
现在,投影法线可以看作是以下各项的限制(d->0):

展开此方程式,然后从命名者和分母中划掉“d”,得出以下公式:

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

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

这不包括我的问题。这是关于正确地将法线变换到眼睛空间。这不是关于投影的,我知道它不是那么简单。在您的情况下,法线变换的结果取决于具有该法线的曲面的位置…@user1282931-您可以在眼睛空间中执行屏幕空间效果吗?确切地说-每个法线向量的原点都会影响结果!不,我不能在眼睛空间表演。我需要根据屏幕空间法线向量计算纹理的查找,然后简单地变换(投影)法线的原点和另一个点(原点被该法线移动)。然后让这两个变换点在投影空间中重新计算法线。我知道如何将法线从切线空间变换到对象空间或世界空间,或者反之亦然。这不包括屏幕空间思想,但一些对象的法线如何与屏幕空间连接。。?法线总是法线,不管你从哪一点看,你的例子是错误的。这不是屏幕空间的外观和工作方式。它是平面上的投影,而不是球体上的投影。
dot(W,N) * (Transform(N) - Transform(P)) / dot(W,P)