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);
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);
相关文章推荐
- unity与android交互
- UnityShader几个纪要
- 【Unity】手势缩放屏幕和旋转视角
- unity3d游戏是怎么开发制作出来的?
- unity shader 随手笔记
- Unity学习笔记--鹰击长空类固定视角游戏摄像机跟随
- Unity3d shader内置矩阵
- 用Unity3D实现简易的AR Demo
- Unity5系列资源管理AssetBundle——更新实现
- Unity5系列资源管理AssetBundle——加载
- Unity5系列资源管理AssetBundle——打包
- Unity Shader 表面着色器边缘光(Rim Lighting)一
- Unity跑酷类游戏自动生成销毁地图
- Unity Shader 在Shader中使用法线贴图
- unity之Ray、RaycastHit 、Raycast
- 【进阶】Unity资源解决方案之AssetBundle
- Advanced Global Illumination in Unity 5 - Unite Europe 2015
- unity3D 调用set和get方法
- Unity3D 常用函数
- Unity 5.1.2f1破解教程