您的位置:首页 > 移动开发 > Unity3D

unity中关于角度的函数

2015-10-08 10:27 459 查看
欧拉角和四元数一直不是太懂,所以最近补一补,先搞清楚应用方面吧

public void ToAngleAxis(out float angle, out Vector3 axis);

其中参数angle为旋转角;参数axis为轴向量。

将对象现在的角度转换成轴向与旋转角。

void AngleAxis(float angle,Vector3 axis)

通过旋转角与轴向量来确定对象的角度

void SetFromToRotation(Vector3 fromDirection,Vector3 toDirection)

var a:Vector3;

var b:Vector3;

var q:Quaternion;

var headUpDir:Vector3;

q.SetFromToRotation(a,b);

transform.rotation=q;

headUpDir=transform.TransformDirection(Vector3.Forward);

输入:a=Vector3(0,0,1); b=Vector3(0,1,0)//把z轴朝向y轴

输出: q=(-0.7,0,0,0.7); headUpDir=(0,1,0)

意思是如果定义一个四元数,那么通过调用这个函数则可返回这个旋转过程。

void SetLookRotation (Vector3 view ,Vector3 up = Vector3.up)

这个函数建立一个旋转使z轴朝向view y轴朝向up。

同样是Quaternion类里面的

四元数运算符也被重载了

Dot为点乘

为组合旋转

旋转一个点,首先用lhs,然后用rhs旋转,与使用组合旋转相同。注意旋转不可交换: lhs*rhs不等于rhs*lhs.

Quaternion.eulerAngles 欧拉角

返回表示旋转的欧拉角度。

表示旋转的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。

//创建一个旋转

var rotation = Quaternion.identity;

//绕y轴,指定一个30度旋转角

rotation.eulerAngles = Vector3(0, 30, 0);

//打印绕y轴的旋转角度

print(rotation.eulerAngles.y);

Quaternion.Lerp

这个就不讲了, 插值。

值得注意的是,Lerp与SLerp的区别在于Slerp是匀角速度,而Lerp是线性。

Quaternion.RotateTowards

static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta : float) : Quaternion

这基本上和Quaternion.Slerp相同,但是这个函数的角速度永远不会超过maxDegreesDelta。负的maxDegreesDelta值将使旋转远离to

Quaternion.Inverse 求反

static function Inverse (rotation : Quaternion) : Quaternion

就是返回反向旋转过程

Quaternion.Angle 角

static function Angle (a : Quaternion, b : Quaternion) : float

返回a和b两者之间的角度。

Quaternion.Euler 欧拉角

返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。

static function Euler (x : float, y : float, z : float) : Quaternion

var rotation = Quaternion.Euler(0, 30, 0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: