Skip to main content

先提前说下,这个方式并不是百分百管用,但是大部分情况下都是可用的。

恢复到世界中心位置,不仅仅是位移恢复,主要的还是旋转也能恢复。有的时候会遇到导入的模型,可能模型就是会有这种问题。

或者是自己做了多次位移之后,还想再恢复回来,都可以试试这个方式。

整体也不难,首先给模型加一个bound节点,求一下模型的边界框。

这个bound节点要调节的参数有两个。一个是勾选Oriented Bounding Box,正常情况下不管模型是什么状态,边界框都是按着世界坐标系的一个立方体框住模型,但是勾选这个参数后,边界框就会按着模型的坐标系来形成边界框。

第二个要修改的参数是勾选下面的Transform Attribute,这样可以产生一个detail属性——xform。这个参数是一个4×4的矩阵,可以记录下因为第一个勾选框所产生的边界框translate变换。

接着我们写一段vex。

[/crayon]

创建一个矩阵类型的变量叫x,记录下第二个输入端的xform属性,然后反转这个矩阵,用P去乘以这个逆矩阵。相当于是用当前模型的位置去乘以一个反转回世界坐标系的数值。这样我们就会得到一个回归到世界坐标中心的模型。

但是这样处理后的模型,有时候位移恢复了,但是旋转有点问题。这时候我们就可以手动加一个transform节点,旋转某个轴向90°就可以解决了。这时候都是90°或者180°等等这种“凑整”的度数。我们不需要自己用眼睛去对,因为有时候偏差一两度看不出来,但是可能对做效果有影响。

最后记得重新算一下法线,这个坐标转换的方式会影响到法线。

但是有时候这个方式也不好用。原因不是这个算法有什么问题,而是因为有时候勾选了boud节点的Oriented Bouding Box,这个节点本身也不能很好的找到模型的坐标轴向。如果看到bound框的方向本身跟模型没有关联的话,那么这个方式多半是没办法用了。

(完)

Leave a Reply