gpt4 book ai didi

opengl - 为什么要通过模型 View 矩阵的逆矩阵转置来变换法线?

转载 作者:行者123 更新时间:2023-12-03 06:17:11 24 4
gpt4 key购买 nike

我正在研究一些着色器,我需要转换法线。

我在一些教程中读到转换法线的方式是将它们与模型 View 矩阵的逆矩阵的转置相乘。但我找不到解释为什么会这样,背后的逻辑是什么?

最佳答案

它源自法线的定义。

假设你有正常的,N ,和一个向量,V ,与法线位于对象上相同位置的切向量。那么根据定义N·V = 0 .

切向量与物体表面的方向相同。因此,如果您的表面是平面,那么切线就是物体上两个可识别点之间的差值。所以如果 V = Q - R哪里QR是表面上的点,那么如果你通过 B 变换对象:

V' = BQ - BR
= B(Q - R)
= BV

通过考虑限制,相同的逻辑适用于非平面表面。

在本例中,假设您打算通过矩阵 B 来转换模型。所以B将应用于几何体。然后要弄清楚如何处理法线,您需要求解矩阵,A这样:

(AN)·(BV) = 0

将其转换为行与列的关系,以消除显式点积:

[tranpose(AN)](BV) = 0

将转置拉到外面,去掉括号:

transpose(N)*transpose(A)*B*V = 0

这就是“法线的转置”[乘积]“已知变换矩阵的转置”[乘积]“我们正在求解的变换”[乘积]“物体表面上的向量型号”= 0

但我们首先声明 transpose(N)*V = 0 ,因为这与 N·V = 0 是一样的。因此,为了满足我们的约束,我们需要表达式的中间部分 - transpose(A)*B ——走开。

因此我们可以得出结论:

 transpose(A)*B = identity
=> transpose(A) = identity*inverse(B)
=> transpose(A) = inverse(B)
=> A = transpose(inverse(B))

关于opengl - 为什么要通过模型 View 矩阵的逆矩阵转置来变换法线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com