3d max 3D坐标转4元数,转换代码现成,一个3D坐标对应多个4元数,所以就想直接写回到3d max看下效果。坑开始了
1. 衣服骨骼无法写入4元数,只能写入欧拉angle,还好,3d Max有转换的API。
2. 再次用别人写用bip.rotate.controller来设置转换后的eluerAngle,写出来是不对的,明显吧,写之前bip.rotate.controller读出来的和quat2eluerAngle转换出来的就是不一样的
3. 但是应该是要一样的啊,猜想quat2eluerAngle转换的时候是不是有问题?试了一下,quat2eluerAngle再eluerAngle2quat转回来不对了,quat最开始为负数的都变成正数了。听说正负号不影响,是一样的,那问题不应该出在这。而且求出来的eluerAngle和在3d Max里面界面显示的是一样的,也证明quat2eluerAngle是OK的
4. 然后就开始怀疑是不是set错地方了,毕竟求出来的eluerAngle和没set前取出来的value(直接读GT,肯定是OK的)都是正确的。然后发现bip.rotate.controller是eluerXYZ的class类型,而quat2eluerAngle是eluerAngle类型,直接这样set必然会有问题(猜想)……
5. Google搜索了一下3d Max seteluerAngle的函数,在一本book上是说用bip.rotation=quat2eluerAngle的输出,试了一下,set进去bip.rotation还是显示quat,值没怎么变,只有最后一个分类变了个负号?然后画面完全崩了?3d Max展示的也不是我想set进去的,还是再debug看下有没有真正地set进去吧,set进去读出来的eluerAngle是不是对的?不然肯定可以正确的显示在界面吧
正好明天一边问别人,一边看有没有set进去