上海网站建设治汇网络,wordpress 微信悬浮,四川建设厅网上查询网站,广西南宁市网站制作公司一个物体表面的法向量如何随着物体的坐标变换而改变#xff0c;取决于变换的类型。使用逆转置矩阵#xff0c;可以安全地解决该问题#xff0c;而无须陷入过度复杂的计算中。 法向量变化规律
平移变换不会改变法向量#xff0c;因为平移不会改变物体的方向。 旋转变换会改…一个物体表面的法向量如何随着物体的坐标变换而改变取决于变换的类型。使用逆转置矩阵可以安全地解决该问题而无须陷入过度复杂的计算中。 法向量变化规律
平移变换不会改变法向量因为平移不会改变物体的方向。 旋转变换会改变法向量因为旋转改变了物体的方向。缩放变换对法向量的影响较为复杂。如上图最右侧的图显示了立方体先旋转了45度再在y轴上拉伸至原来的2倍的情况。此时法向量改变了因为表面的朝向改变了。但是如果缩放比例在所有的轴上都一致的话那么法向量就不会变化。
模型矩阵的逆转值矩阵可以用来变换法向量。实际上在某些特殊情况下可以通过模型矩阵来确定物体变换后的法向量。比如说当物体在旋转时可以用旋转矩阵直接乘以法向量就能获得旋转后的法向量。总之计算变换后的物体表面的法向量方向时是求诸于模型矩阵自身还是模型矩阵的逆转值矩阵取决于模型矩阵中已经包含的变换类型平移、旋转或缩放。
直接通过模型矩阵自身求变换后的法向量。如果模型矩阵中已经包含了平移变换法向量就会被当作顶点坐标平移从而导致法向量与原有的表面朝向不一致。比如说一个法向量是100沿Y轴平移2.0个单位后就变成了120。事实上如果你从4×4的模型矩阵的左上角抽出3×3的子矩阵然后乘以法向量就可以避免该问题。如下所示4*4的模型矩阵 由于3×3的子矩阵实际上包含了旋转矩阵和缩放矩阵的信息我们来逐一考虑。
如果只进行旋转操作
你可以使用模型矩阵的3×3子矩阵对法向量进行变换。如果在变换前法向量已经归一化了那么变换后的法向量无须再归一化处理。
如果只进行缩放操作且缩放因子相同
你可以使用模型矩阵的3×3子矩阵对法向量进行变换。但是变换后的法向量需要再次归一化处理。
在这种情况下当你只进行缩放操作且缩放因子相同时这意味着X轴、Y轴和Z轴的缩放因子是一致的。比如你希望以一致的缩放因子2.0进行缩放那么就需要将法向量 3*3 子矩阵 变换后归一化这时即使物体的尺寸发生了变化但是其形状并未改变。
如果进行了缩放操作但缩放因子不同
必须使用模型矩阵的逆转值矩阵对法向量进行变换。变换后的法向量必须再次归一化处理。原因如下
如下图使一个矩形物体左图沿Y轴拉伸2.0倍拉伸后的形状如右图所示。这里为了获得变换后的法向量我们试图使用模型矩阵乘以原先的法向量110。但是得到的结果是120并不垂直于拉伸后的物体表面了。 推导
令模型矩阵为M令初始的法向量为n令变换矩阵为M也就是用来正确变换法向量n的矩阵令垂直于n的向量为s令变换后的法向量为n令垂直于n的向量为s
有等式一、二 n M * n s M * s n和s以及 n和 s的关系 如下 现在我们就来计算M使得n和s的相对角度保持垂直。我们知道两个垂直矢量的点积是0点乘操作使用点运算符“ · ”表示所以有 n· s 0 将等式一、二代入并重写上式 从上图中可以看出M就是通过转置M的逆矩阵得到的或者说M就是M的逆转置矩阵。因为M已经可能包含了上面列举过的三种变换情况所以计算M的逆转置矩阵并乘以法向量就可以获得正确的结果因此这才是对法向量进行变换的最佳方法
另计算逆转置矩阵可能会比较耗时如果你非常确定物体的变换只包含上述12的情形也可以简单地使用上述 模型矩阵的3×3子矩阵 来对处理法向量。