Unity3d开发之对Quaternion的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33994566/article/details/82892236

上周找到了新公司。这周二来上班。可怕的是我刚去的第二天下午四点领导通知我做一个VRdemo,要求第二天交。我勒个擦。我现在对设备还没熟悉呢。连sdk都没下载而且距离上一次开发vr是在快两年之前了。属实让我措手不及。没错,按剧本走,加班到凌晨。累屁了。下面记录下我在开发项目中遇到对Quaternion的使用。

Quaternion是四元数的类。而四元数是可以操作一个物体的旋转。我们百度可以看到四原数可如下表示:

没错,标准的四元数w在第一位,接下来是xyz分量。上式代表物体绕着(vx,vy,vz)轴旋转\theta度。我们先不管(vx,vy,vz)代表的是世界坐标系下的轴还是本地坐标系下的轴。这个我们在后面会区分。而unity的四元数构造器如下:

所以我们可能需要调整下对应值的顺序。

如果我们想绕着y轴旋转90度,对应代码如下:

 //声明一个四元数  按照公式往里填数
        Quaternion q = new Quaternion(0,Mathf.Sin(Mathf.Deg2Rad*90/2),0, Mathf.Cos(Mathf.Deg2Rad * 90 / 2));
        transform.rotation = transform.rotation*q;	

我们把这个脚本挂到物体上会发现,物体会绕着自身的Y轴旋转90度。我们记得四元数是左乘,于是我们换一下位置尝试下:

//声明一个四元数  按照公式往里填数
        Quaternion q = new Quaternion(0,Mathf.Sin(Mathf.Deg2Rad*90/2),0, Mathf.Cos(Mathf.Deg2Rad * 90 / 2));
        transform.rotation = q*transform.rotation;	

我们再次测试发现物体绕着世界坐标的Y周旋转。所以综上我们可以得出两个结论:

  • 四元数右乘是代表绕着被旋转物体本地对应的坐标轴旋转。而左乘代表绕着世界坐标对应的坐标轴旋转。
  • 四元数旋转是按着顺时针方向旋转的。(角度是正值的情况下)

后面会更新一篇关于在开发vr过程中对四元数使用的文章。至于以上原理是啥,我也不太清楚。四元数是半路学的而且也不专业。希望以后明白了原理再来更新。以上是本博客的内容,如果有不正确的地方欢迎指出。

附赠一张凌晨回家的照片。感觉像是国家元首视察,封路。一路上都没有车真好。

猜你喜欢

转载自blog.csdn.net/qq_33994566/article/details/82892236