gpt4 book ai didi

opengl-es - 在 webgl 中转换法线

转载 作者:行者123 更新时间:2023-12-02 15:25:28 25 4
gpt4 key购买 nike

我有 2 个带法线的点云。在 webgl Canvas 上渲染点之前,我需要将 PointCloud1 转换到与 PointCloud2 相同的坐标空间,并且我有转换矩阵 T,(rot,scale,trans),它非常适合这些点。我想对法线做同样的事情。阅读一些教程后,我尝试了这个:

n' = 转置(逆(T))*n

我理解这背后的数学原理,但有些教程提到我应该只取 T 中的上 3*3 矩阵。我不确定是否应该这样做

  1. 乘以上 3*3 T 与 n = [a b c] 或
  2. 与 n = [a b c 0] 的 4*4 T 相乘。

如果我使用第二个选项,我将得到 n' = [a' b' c' d']。我应该将这个向量除以 d' 以使其均匀吗?

最佳答案

既然您说您只使用旋转、平移和缩放,那么您无需担心整个逆转置问题。至少只要通过“缩放”,就意味着统一缩放。如果您使用非均匀缩放,则正常变换确实需要特别考虑(有关非均匀缩放的背景,请在此处查看我的回答:normal matrix for non uniform scaling)。

左上角的 3x3 子矩阵的逆转置通常用于变换法线。但在这种情况下,左上角的 3x3 子矩阵仅包含旋转和缩放。旋转和缩放矩阵的逆转置与原始矩阵相同。所以整个反转置计算是空操作。

嗯,严格来说,均匀缩放矩阵的逆转置与原始矩阵不同。但它仍然是一个统一的缩放矩阵,这意味着唯一的区别是生成的法向量的长度。由于一旦涉及缩放,在转换法线之后无论如何都必须重新规范化法线,因此它仍然没有实际区别。

无论您是为法线显式创建一个单独的 3x3 矩阵,还是在扩展有 0 分量的法向量上使用常规 4x4 矩阵,在很大程度上取决于偏好。从数学上讲,结果是完全一样的。使用 4x4 矩阵的优点是不向着色器传递额外的 3x3 矩阵更简单。缺点是它的效率可能较低,因为您要用比必要更大的矩阵执行乘法。

实际上,恕我直言,最好的方法是将一个单独的 3x3 法线矩阵传递到着色器中,并使其仅包含变换的旋转部分,但缩放。这样,您可以跳过通常在应用变换后必须重新规范化法线的步骤,因为纯旋转会使矢量的长度保持不变。

关于问题的最后一部分:如果您使用 4x4 矩阵,请不要除以结果向量的第 4 个分量。第 4 个分量将为零,您不想除以零...

关于opengl-es - 在 webgl 中转换法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632381/

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