我正在尝试将变换应用于STL文件中的3D对象(不创建结构化网格对象)。以下是我的工作方式:我在STL文件中逐个读取法线和面信息,将我的变换应用于每个顶点和面法线,并在另一个STL文件中写回新的计算值。 生成的文件中的顶点是正常的,但我的法线错了。似乎我不能像往常一样将变换应用于法线。怎么可能?
答案 0 :(得分:2)
你应该看看transforming normals。
实际上,杰夫,你只是部分正确。对于矢量,你是对的。但是对于一个正常的,意思是有点不同,你必须通过上面的3x3变换,但是反转,然后换位。
答案 1 :(得分:2)
您可以为两者应用几乎相同的转换但请记住以下两点:
答案 2 :(得分:1)
变换矢量与变换点不同 - 您不能应用变换,只能应用旋转。
答案 3 :(得分:1)
引用Rodrigo Lopez:法线是方向,所以4x4矩阵的位置部分不应该真正应用,但重新规范化无论如何都会修复它。
重整化不会修复它:假设法线是(1,0,0)然后将其翻译为(-2,0,0)=>正常将是(-1,0,0),它被归一化并且是错误的,因为法线应该保持不变。
答案 4 :(得分:-1)
您需要将矩阵的反转置应用于法线,而不是使用原始矩阵。
此外,在转换时,您需要将法线的w坐标视为0(而不是像点一样)。