这是个只看标题跟稍微看下内文就开始乱说话的概念(?),以下可能有错,
有错的部分还麻烦大大们指教了。
大部分的人在程式码写旋转的时候,都可能会用尤拉角去描述。
(这里指譬如说模型输入时y轴向上,所以想旋转以符合engine的那种hard-coded)
以我自己的了解,常见的尤拉角的意思是:以固定的顺序(像是xyz或是zyx),用三个角
度去描述一个物体如何在空间中旋转。
换句话说,如果只存三个角度,而每次要旋转时只改角度,那么就会有万向锁的问题。
就算是用四元数,还是可以漂亮地做出万向锁:
假设有个状况是想要绕x轴转90度,在程式码里面写上x+=90,然后每次旋转都按照zxy或y
xz去重新组出矩阵或是四元数(不能跟前面结果相乘),大概或许应该仿佛似乎就可以发现
卡住惹。因为就算你用了矩阵或四元数,你就是用了尤拉角去表达了这次的旋转。
但如果今天的转法是,把第一次旋转的三个角度记录成不管是矩阵或是四元数,第二次
旋转的三个角度也是换成矩阵或四元数以后,与第一个结果相乘以后,不管什么角度都是
能够转到的。因为你已经不是只用三个角度变量去模拟这个旋转,而是一次旋转以后,
又一次旋转。(但如果是角度累加就out了,因为最后还是三个角度决定这次旋转)
所以不要再搞混了,尤拉角是一种旋转的表达方法,四元数跟矩阵是拿来运算的工具。
而从四元数或矩阵往回推的时候,可以被转成固定顺序的尤拉角(毕竟你之后要拿这个资
料去旋转。而就我所知,不管有没有指定顺序,貌似回推都不会有唯一的结果),或是一根
参考轴+角度(感觉除了没转可能有多重解以外,其他会有唯一解?)。
嗯,我已经不知道我在说啥了。
反正就是尤拉角这种表达方法是万向锁的根本,但如果尤拉角表达出来一个转换以后,
又叠加上一个尤拉角表达出来的转换,那么就没问题了。(绕口令)
而矩阵跟四元数有啥差别?据说是因为插值跟储存空间的缘故。
我是觉得跟二维的复数平面的旋转类似,就运算规则的问题而已...应该不是什么神奇的
新世界。
P.S.
貌似有看到换轴的问题,旋转是刚体变换,如果变换过程有镜像,貌似不是旋转就可以解
决的事情惹。要把某个轴换成某个轴的话,貌似直接自己手写三阶矩阵会比较快吧?有
code的话更好,直接把分量swap一下就好。
至于四元数能不能表达镜像之类的...有请其他大大惹,我是觉得不行啦,感觉复数的运
算规则应该只是刚好符合旋转而已,顶多再加上放大缩小之类的@@