Unity 3D 矩阵和四元数的研究
2017-02-15 13:18
281 查看
版本:unity 5.4.1 语言:C#
2017年了,使用Unity也有一段时间了,略有心得吧,基本上要求一些功能可以拼拼凑凑地做出来,算是入门了吧。
不过很多游戏上使用的技术还没有接触过,比如protobuf、热更新、Shader之类,今年的一开始接触一下游戏中常用的技术,然后Shader方面好好入门一下。当然好早之前的3D游戏开发大师也会在今年早期看完。
暂定这些目标吧,好好磨练一下技术。
今天给大家带来的是矩阵和四元数,首先矩阵说实话在Unity今天还是第一次,找Api都花了点时间,不过使用下来还是挺容易的,跟代数很像。
首先是最简单的平移矩阵:(看的实战核心技术,不过书里很多矩阵都是错的)
1 0 0 0
0 1 0 0
0 0 1 0
Tx Ty Tz 1
Tx、Ty、Tz是x、y、z轴移动的数值,具体使用的话,使用Matrix4x4 mat = new Matrix4x4();创建矩阵对象,然后乘以new Vector4(x, y, z, 1f)表示的三维坐标,获得的Vector4就是移动后的坐标。后面的矩阵也都是这个原理,就不会再赘述了。
缩放矩阵:
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
x轴旋转矩阵:
1 0 0 0
0 cos(a) sin(a) 0
0 -sin(a) cos(a) 0
0 0 0 1
y轴旋转矩阵:
cos(a) 0 -sin(a) 0
0 1 0 0
sin(a) 0 cos(a) 0
0 0 0 1
z轴旋转矩阵:
cos(a) -sin(a) 0 0
sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1
以上就是常用的几个矩阵了。
四元数其实有点像是矩阵的效果,不过计算更加复杂难以理解,我这边参考了candycat的教程给出几个结论。
四元数的表示为(v, w),其中v类似是一个三维坐标。
单位长度的一个旋转轴(x, y, z)和角度a,则对应的四元数为((x, y, z)*sin(a/2), cos(a/2)) 。
创建四元数的几种方法:
Quaternion.Euler(Vector3) 以欧拉角创建四元数
Quaternion.AxisAngle(Vector3,float) 相对于某个方向旋转某个角度的四元数
Quaternion.FromToRotation(Vector3,Vector3) 起始方向到结束方向的四元数
Quaternion.LookRotation(Vector3) 朝向为正方向,旋转轴为上方向,旋转到想要方向的四元数
使用四元数:
operator* 四元数相乘,旋转累积
operator* Vector3左乘四元数,点旋转到对应点
Lerp 线性插值
Slerp 球形插值
LerpUnclamped 非钳制线性插值,可以突破0和1的界限
SlerpUnclamped 非钳制球性插值,可以突破0和1的界限
欧拉角的旋转:
Transform.Rotate(Vector3) 就是transform的3个值,需要注意的是如果设置x为90度,则移动其他的纬度都会改变y,这就是万向节锁。
常用的方法估计就以上几个,如果后面有好用的方法,我还会再补充。
2017年了,使用Unity也有一段时间了,略有心得吧,基本上要求一些功能可以拼拼凑凑地做出来,算是入门了吧。
不过很多游戏上使用的技术还没有接触过,比如protobuf、热更新、Shader之类,今年的一开始接触一下游戏中常用的技术,然后Shader方面好好入门一下。当然好早之前的3D游戏开发大师也会在今年早期看完。
暂定这些目标吧,好好磨练一下技术。
今天给大家带来的是矩阵和四元数,首先矩阵说实话在Unity今天还是第一次,找Api都花了点时间,不过使用下来还是挺容易的,跟代数很像。
首先是最简单的平移矩阵:(看的实战核心技术,不过书里很多矩阵都是错的)
1 0 0 0
0 1 0 0
0 0 1 0
Tx Ty Tz 1
Tx、Ty、Tz是x、y、z轴移动的数值,具体使用的话,使用Matrix4x4 mat = new Matrix4x4();创建矩阵对象,然后乘以new Vector4(x, y, z, 1f)表示的三维坐标,获得的Vector4就是移动后的坐标。后面的矩阵也都是这个原理,就不会再赘述了。
缩放矩阵:
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
x轴旋转矩阵:
1 0 0 0
0 cos(a) sin(a) 0
0 -sin(a) cos(a) 0
0 0 0 1
y轴旋转矩阵:
cos(a) 0 -sin(a) 0
0 1 0 0
sin(a) 0 cos(a) 0
0 0 0 1
z轴旋转矩阵:
cos(a) -sin(a) 0 0
sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1
以上就是常用的几个矩阵了。
四元数其实有点像是矩阵的效果,不过计算更加复杂难以理解,我这边参考了candycat的教程给出几个结论。
四元数的表示为(v, w),其中v类似是一个三维坐标。
单位长度的一个旋转轴(x, y, z)和角度a,则对应的四元数为((x, y, z)*sin(a/2), cos(a/2)) 。
创建四元数的几种方法:
Quaternion.Euler(Vector3) 以欧拉角创建四元数
Quaternion.AxisAngle(Vector3,float) 相对于某个方向旋转某个角度的四元数
Quaternion.FromToRotation(Vector3,Vector3) 起始方向到结束方向的四元数
Quaternion.LookRotation(Vector3) 朝向为正方向,旋转轴为上方向,旋转到想要方向的四元数
使用四元数:
operator* 四元数相乘,旋转累积
operator* Vector3左乘四元数,点旋转到对应点
Lerp 线性插值
Slerp 球形插值
LerpUnclamped 非钳制线性插值,可以突破0和1的界限
SlerpUnclamped 非钳制球性插值,可以突破0和1的界限
欧拉角的旋转:
Transform.Rotate(Vector3) 就是transform的3个值,需要注意的是如果设置x为90度,则移动其他的纬度都会改变y,这就是万向节锁。
常用的方法估计就以上几个,如果后面有好用的方法,我还会再补充。
相关文章推荐
- Unity 3D 海水的实现3 水反射BUG排除 反射矩阵的研究
- [原]Unity手游之路 四 3d旋转-四元数,欧拉角和变幻矩阵
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- Unity 3D--定义摄像机的投影矩阵
- 3D数学基础公式------>矩阵,欧拉角,四元数,之间转换<2>
- [Unity] 3D数学基础 - 2D旋转矩阵
- Unity 3D——四元数的应用
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- 3D图形:矩阵、欧拉角、四元数与方位的故事
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- Unity 3D 残影的研究 截取当前模型的网格材质并显示
- [置顶] unity关于图形学的基础知识-3D矩阵的变换(四)
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- [原]Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- 关于Unity中的3D数学基础知识<三>矩阵的基础知识和使用
- 3D数学之-向量矩阵欧拉角和四元数
- Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵
- Unity 3D引擎:十大最火的插件推荐
- 跨平台次世代游戏引擎Unity 3D
- 矩阵,欧拉角,四元数比较