http://blog.csdn.net/janeky/article/details/17272625

今天我们来谈谈关于Unity中的旋转。主要有三种方式。变换矩阵,四元数和欧拉角。

定义

  • 变换矩阵

可以执行任意的3d变换(平移,旋转,缩放,切边)并且透视变换使用齐次坐标。一般比较少用到。Unity中提供了一个Matrix4x4矩阵类

  • 四元数

“四元数是最简单的超复数。 复数是由实数加上元素 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个元素 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = ijk = -1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi + cj + dk,其中a、b、c 、d是实数”。这些概念很难懂吧。只要先记得Unity中的Quaternion有4个组件(x,y,z,w)

  • 欧拉角

“用来确定定点转动刚体位置的3个一组独立角参量,由章动角θ、旋进角(即进动角)ψ和自转角j组成”
在Unity中,Quaternion.eulerAngles 返回旋转的角度,绕z轴旋转euler.z角度,绕x轴旋转euler.x度,绕y轴旋转euler.y度

转换

  • 1.四元数到变换矩阵
[csharp] view plaincopy
  1. Quaternion q = Quaternion.LookRotation(new Vector3(0,0.5,1));
  2. Matrix4x4 rot = new Matrix4x4();
  3. rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
  • 2.变换矩阵到四元数
[csharp] view plaincopy
  1. Matrix4x4 rot = new Matrix4x4();
  2. rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
  3. Vector4 vy = rot.GetColumn(1);
  4. Vector4 vz = rot.GetColumn(2);
  5. Quaternion newQ = Quaternion.LookRotation(new Vector3(vz.x,vz.y,vz.z),new Vector3(vy.x,vy.y,vy.z));

常用的函数
function ToAngleAxis (out angle : float, out axis : Vector3) : void
绕axis轴旋转angle,创建一个旋转

static function Angle (a : Quaternion, b : Quaternion) : float
返回a和b两者之间的角度。

var eulerAngles : Vector3
返回表示旋转的欧拉角度。表示旋转的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。

function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
把物体的fromDirection旋转到toDirection

function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
建立一个旋转使z轴朝向view y轴朝向up

static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
从from 转换到to,移动距离为t

static function Lerp (a : Quaternion, b : Quaternion, t : float) : Quaternion
跟Slerp相似,且比Slerp快,.但是如果旋转角度相距很远则会看起来很差

比较

  • 变换矩阵

可以做各种复杂的变换,但是学习曲线比较大,使用的内存也比较多,因为存储的数据量比较大。

  • 欧拉角

简单理解,尤其是对美术和策划的同事。运算速度和消耗内存比较少。可能存在万向锁的问题(两个轴的旋转重合)

  • 四元数

避免了万向锁的问题。理解起来不是那么直接。
有任何问题欢迎一起探讨ken@iamcoding.com

转载于:https://www.cnblogs.com/123ing/p/4114864.html

Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵相关推荐

  1. Unity手游之路十自动寻路Navmesh之跳跃,攀爬,斜坡

    转载 Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡 分类: unity2013-12-27 00:50 6545人阅读 评论(5) 收藏 举报 unity3dNavme ...

  2. Unity手游之路九自动寻路Navmesh之高级主题

    http://blog.csdn.net/janeky/article/details/17492531 之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路.今天我们再继续深入探索 ...

  3. Unity手游之路lt;七gt;角色控制器

    我们要控制角色的移动,能够所有细节都由自己来实现.控制角色模型的移动,同一时候移动摄影机,改变视角.当然Unity也提供了一些组件,能够让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学 ...

  4. Unity手游之路三 基于Unity+Java的聊天室源码

    http://blog.csdn.net/janeky/article/details/17233199 项目介绍 这是一个简单的Unity项目,实现最基本的聊天室群聊功能.登录聊天室后,用户可以输入 ...

  5. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  6. 如何做Unity手游性能优化的

    Unity性能优化参考: http://gameinstitute.qq.com/article/detail/39757 https://blog.uwa4d.com/archives/allino ...

  7. 知物由学|游戏开发者如何从容应对Unity手游风险?

    本文由 网易云 发布 "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会 ...

  8. MMORPG的一份Unity手游性能蓝皮书

    https://mp.weixin.qq.com/s/iEs-1O3wTntaTrrCnOBn-A 这可能是针对MMORPG最全的一份Unity手游性能蓝皮书 2017-07-21 侑虎科技 游戏葡萄 ...

  9. Unity手游性能测评报告——MOBA篇

    MOBA移动游戏性能分析报告:渲染.UI和逻辑代码是性能头号杀手! UWA曾经发布过MMORPG 和 ARPG 的Unity手游性能测评报告,延续该系列,最近UWA对提交测试(登陆 www.uwa4d ...

最新文章

  1. 脑机融合技术的哲学审思
  2. Packet Tracer 5.0配置cisco路由器详细说明
  3. 90后,一个即将成为程序员的我
  4. [react] 在React中如果去除生产环境上的sourcemap?
  5. 关于JDK8采坑JCE加密限制版本问题
  6. 如何在MySQL中设置主从复制
  7. android点击不同次切换不同图片,Android实现简单的上一张、下一张图片切换显示...
  8. 金融数据类——外汇,CFD
  9. 微信订阅号获取openid
  10. 谜底是计算机病毒的谜语,有关于安全的谜语及谜底答案解析|谜底是粽子的谜语...
  11. 单生狗必备之如何用Python给PLMM表白
  12. 四天工作制究竟香不香;复旦发布类ChatGPT模型Moss;苹果上新348元省电保护膜 | EA周报...
  13. 在微信小程序开发中遇见的bug及解决方案
  14. 1553B总线基础知识及扩展
  15. 133、H3C交换机恢复出厂和各种基本配置
  16. matlab求异面直线的公垂线,求异面直线的公垂线
  17. java采用匈牙利命名法_【Java】工具类,如何将匈牙利命名法转换成驼峰命名法-Go语言中文社区...
  18. Oracle中的触发器
  19. 2021年金属非金属矿山(露天矿山)安全管理人员最新解析及金属非金属矿山(露天矿山)安全管理人员模拟考试
  20. 思一独角兽游戏 | 综艺高能玩家:看中医刘昊然、区块链圈90后CEO如何玩转高智商棋牌游戏 | SIU

热门文章

  1. java将图片变成圆角_android图片处理之让图片变成圆形
  2. [USACO1.5]回文质数 Prime Palindromes
  3. Python+Opencv根据颜色进行目标检测
  4. Matlab 图像处理的一些杂记
  5. PADS 非常用操作 备忘
  6. Eigen密集矩阵求解 2 - 求解最小二乘系统
  7. 打开应用蜂窝移动数据就关闭_基于移动应用行为数据的客户流失预测
  8. 单元测试: gmock
  9. 美元贬值越来越严重,美元会不会有崩溃的一天?
  10. 有人说华为最大的对手是5年后的小米,你怎么看?