首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity精华☀️三、四元数(Quaternion)解决万向锁

本节为Unity万向锁系列的最后一节, 这一节我们就来解决这个难题:使用四元数旋转,避免Unity万向锁。...理论上,欧拉旋转可以靠这种顺序让一个物体指到任何一个想要的方向,但如果在旋转中不幸让某些坐标轴重合了就会发生万向节锁,这时就会丢失一个方向上的旋转能力,也就是说在这种状态下我们无论怎么旋转(当然还是要原先的顺序...)都不可能得到某些想要的旋转效果,除非我们打破原先的旋转顺序或者同时旋转3个坐标轴; 由于万向节锁的存在,欧拉旋转无法实现球面平滑插值; 想要的运动 遇到万向锁,欧拉角无法差值运算...优点: 可以避免万向节锁现象; 只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高; 可以提供平滑插值; 四元数遇到万向锁可提供平滑的差值运算...transform.Rotate(90, 0, 0, Space.World); //或者: transform.Rotate(new Vector3(0, 90, 0), Space.World); 四元数和欧拉角的相互转换

19810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    欧拉角_欧拉角 图

    首先是因为欧拉角有万向节死锁的问题。 3D游戏或者3D电影中,比如黑客帝国中酷炫的旋转是怎么实现的? 旋转的算法有很多,这里主要介绍其中一种:欧拉角。...这个旋转叫pitch,中文是俯仰: 这个旋转叫Yaw,中文叫偏航: 这个旋转叫Roll,中文叫桶滚: 可以看出,确实工作方式和万向节一样。...相对旋转发生在蓝色连接头。如下图: 最终,在船体发生Pitch、Yaw、Roll的情况下,万向节都可以通过自身的调节,而让转子和旋转轴保持平衡。...: 万向节死锁的根源在于欧拉角的定义方式 万向节死锁的结果,不是说不能旋转了,而是会导致旋转不自然 要规避万向节死锁,需要选择合适的旋转顺序(有12种旋转顺序) 4 总结 在编程中很难规避死锁问题,所以现在很多时候都使用四元数实现旋转...,四元数那又是另外的话题了。

    76430

    欧拉角和万向节死锁

    欧拉角 我们在现实生活中向左转向右转,向上看向下看这些都是旋转,用欧拉角(Euler angles)来描述这些旋转最符合我们的常识,称作欧拉角是因为它是数学大神欧拉证明的,他证明任何一个 3D 空间的旋转...,都可以拆分为沿着自身三个坐标轴的旋转,也就是任何 3D 空间旋转都是由三个基本旋转矩阵复合而成的。...但是这并不能完全解决问题,它还会受到万向节死锁影响。 万向节死锁 万向节死锁(Gimbal lock)是欧拉角根本性的问题,我们并不能和上面一样通过一些方法来解决这个问题。...如下图所示,我们期望的是第二个旋转,而不是第一个不自然的旋转。 要避免万向节死锁问题,我们可以用四元数来描述定向,这将在下一篇文章介绍。...万向节死锁是欧拉角的第二个轴旋转角度是正负 90 度时,将会失去一个轴的自由度,它会让两个定向之间的插值变得不自然,要解决万向节死锁问题需要用到四元数。

    1.3K20

    js调用原生API--陀螺仪和加速器

    为了避免万向节锁,我们有其他的表达设备方向的旋转系统,比如基于矩阵的或者基于四元数的设备方向表达法。我们会在下面分别介绍这两者。...避免万向节锁 首先,我们上一节说了,避免万向节锁是有意义的。为此,我们可以在deviceorientation事件监听器中把航空次序欧拉角转换成其他的旋转表达法,比如旋转矩阵或四元数。...屏幕方向 一旦我们有了可以避免万向节锁的旋转表达法(比如旋转矩阵或四元数),我们就得把新的旋转表达法转变到与当前设备屏幕方向相匹配的位置。屏幕方向可以通过当前屏幕方向的角度用在Z轴上的变化来定义。...有了这四个数,我们就能完美的描述设备的方向并且避免万向节锁的发生了。...总结 本文中,我们实现了两种避免万向节锁的设备三维空间运动模型:旋转矩阵和四元数。 用这两者我们可以容易地进行屏幕方向和虚拟世界坐标匹配并得出旋转模型然后被用于增强现实web类应用。

    4.8K161

    Unity基础(12)-物理系统

    1.什么是Unity物理系统 Unity是一款3D引擎软件,内置NVIDIA PhysX物理引擎,使3D物体具备物理属性,产生物理效果。...Unity中两种刚体: 1.普通刚体(影响自己也影响其他物体),如:3D角色,运动的车子等 2.运动学刚体(Is Kinematic为 true, 自己不受物理引擎的驱动,但是会影响其他刚体)如:山体...来平滑此次的transform Collision Detection 碰撞检测方式(枚举)控制避免高速运动的游戏对象穿过其他游戏对象昂而未发生碰撞 Discrete:离散碰撞检测 Continuous...检测与采用来连续碰撞模式或连续动态碰撞模式对象的碰撞,一般用于检测快速运动的游戏对象 Constraits 冻结位置和旋转 4-方法 ?...作为结果这个将在这个物体上应用一个力矩和力(瞬时)。

    1.7K10

    【笔记】《计算机图形学》(16)——计算机动画

    本篇字数7.8k, 篇幅较长但是难度不高, 只有对3D物体旋转的插值那部分涉及到了一些数学概念, 大多数内容都可以当作科普阅读. 才疏学浅,错漏在所难免。...欧拉角旋转有一个常见的问题是著名的万向节死锁问题(常平架锁定, 框架自锁; Gimbal Lock), 下图是这种情况的典型情况....让我们后续对X和Y的旋转是等价的....万向节死锁 万向节死锁问题在程序中其实很难完全避免, 且死锁情况很容易发生, 再加上用欧拉角表示旋转还会带来欧拉同名问题, 也就是同样的一个旋转目标可以有多种不同的旋转方式达到, 这对于三维旋转和插值问题非常不利...四元数形式的旋转公式可以避免万向节死锁的问题, 而且通过不断复合这个旋转公式, 使用不同的旋转四元数就可以对目标连续旋转. 利用四元数可以连续使用的特点, 我们可以对四元数进行插值.

    1.7K30

    Unity3D中的Quaternion(四元数)

    Unity3D中的Quaternion(四元数) 四元数的概念 四元数,这是一个图形学的概念,一般没怎么见过,图形学中比较常见的角位移的表示方法有“矩阵”、“欧拉角”、“四元数”这三种...可以说各有各的优点和不足,不同的场合用不同的方法。其中四元数的优点有:平滑插值、快速连接、角位移求逆、可以与矩阵形式快速转换、仅用四个数表示。...好了,上面我们就基本清楚四元数的作用以及好处与坑了,下面开始正式讲讲Unity中我们如何使用一些常见的四元数操作。...Unity中的四元数 基本的旋转,我们可以通过Transform.Rotate来实现,但是当我们希望对旋转角度进行一些计算的时候,就要用到四元数Quaternion了。...如果自身坐标和目标之间的夹角是X度,我们想以s=30度每秒的速度旋转到目标的方向,则每秒旋转的角度的比例为s/X。

    6.2K30

    第4章-变换-4.2-特殊矩阵变换和运算

    大多数制造过程,包括3D打印,都认为z方向在世界空间中;航空和海上交通工具认为-z向上。建筑和GIS通常使用z-up,因为建筑平面图或地图是二维的,x和y。...这些是使用替代方向表示(如本章稍后讨论的四元数)值得研究的一些原因。使用欧拉角,你还遇到被称为万向节死锁的问题,这将在接下来的第4.2.2节中解释。...如果 ,我们会遇到万向节死锁的问题(第4.2.2节):旋转角 和 将围绕同一轴旋转(尽管可能在不同的方向上,取决于 旋转角是 还是 ),所以只需要推导出一个角度。...上面概述的简单方法可能会导致数值不稳定的问题,这是可以避免的,但会降低速度[1362]。 当您使用欧拉变换时,可能会产生称为万向节死锁的问题[499,1633]。...最后一个顺序,z/x/z,对于某些应用来说可能更好,因为只有当围绕x轴旋转 弧度(半旋转)时才会发生万向节死锁。没有完美的序列可以避免万向节死锁。

    3.5K40

    Unity基础教程系列(新)(一)——游戏对象和脚本(Creating+a+Clock)

    创建新项目时,可以选择其Unity版本和模板。我们将使用标准的3D模板。创建之后,它将添加到项目列表中,并在相应版本的Unity编辑器中打开。 是否可以使用其他渲染管线创建项目?...它控制游戏对象的位置,旋转和比例。确保所有时钟的位置和旋转值都设置为0。其缩放应统一为1。 2D对象呢? 使用2D而不是3D时,可以忽略三个尺寸之一。...四元数基于复数,用于表示3D旋转。尽管比单独的X,Y和Z旋转角度的组合更难理解,但它们具有一些有用的特性。例如,他们不会遭受万向节锁定(gimbal lock)的困扰。...我们为X,Y和Z旋转提供三个数字。前两个使用零,Z旋转使用-30。 ? 调用的结果是一个四元数结构值,该值包含围绕Z轴顺时针旋转30°,与我们的时钟的小时1相匹配。 什么是结构体?...一分钟和一秒都由负六度旋转表示。当我们现在还访问其他两个字段时,我们也应该显式地给它们提供默认值,以避免编译器警告我们之前得到了。 ? ?

    4.3K20

    Unity动画系统需要了解的东西,包括:编辑器、事件、资源管理等

    线性平均(Linear Average):该插值模式适用于旋转属性,它会将前一个关键帧的旋转平均到下一个关键帧的旋转值上,从而在两个关键帧之间平滑地过渡。...立体插值(Slerp Interpolation):该插值模式适用于旋转属性,使用球面插值算法(Slerp)来实现平滑的旋转过渡效果。...例如,可以设置模型的缩放、旋转、偏移以及动画剪辑的设置。 导入模型: 在Unity中,选择要导入的3D模型文件并将其拖放到项目资源文件夹中,或者使用“导入新资源”选项从文件菜单中导入。...预处理模型: Unity会在导入模型之前对其进行预处理。预处理可以包括模型的优化、纹理的压缩等。 导入动画: 如果3D模型包含动画,导入器会将动画剪辑和相关信息导入到Unity项目中。...利用动画片段和过渡 使用AnimationClip来创建动画片段,将不同的部分分成独立的动画片段,这样可以更好地复用动画,避免重复制作相似的动画。

    79951

    Cinemachine(一)VirtualCamera和Brain的简单介绍「建议收藏」

    官方文档:https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/index.html 我们可以通过Package Manager...我们调整该VirtualCamera的坐标和旋转,从另个角度看向Cube,例如下图。 然后我们隐藏该VirtualCamera,会重新显示CM vcam1的画面,然后运行Unity。...若无法接受该抖动,请关闭该属性,或者让目标的运动轨迹更加平滑。 Lookahead Smoothing 平滑值,较大的值可以使抖动预测的更加平滑,但是也会增加预测的延时。...使用好该设置对于避免万向节锁(gimbal-lock)非常重要。...Cut 瞬切,立马显示下个VirtualCamera的画面 Ease In Out S型曲线,混合开始和结束时比较平滑(慢->匀速->慢) Ease In 混合结束时比较平滑(匀速->慢) Ease Out

    6.8K23

    Unity的物理系统

    Unity提供了两个独立的物理引擎:一个用于3D物理系统,另一个用于2D物理系统。...3D 物理系统 Unity的3D物理系统主要依赖于Nvidia PhysX引擎,该引擎能够提供复杂的物理模拟效果,包括但不限于刚体动力学、碰撞检测、关节连接和角色控制。...Spring 和 Damper:模拟弹簧和阻尼器的效果,用于平滑运动。 对角色控制准确性的影响 关节组件对角色控制的准确性有显著影响。...使用简单的碰撞器:尽量使用简单的碰撞器进行碰撞检测,减少复杂性,同时避免不必要的刚体组件和复杂的碰撞设置。...选择合适的物理引擎:Unity提供了Nvidia PhysX和Box2D两个物理引擎,分别用于3D和2D物理模拟。根据游戏需求选择合适的物理引擎,并正确使用它来提高整体性能。

    10310

    【100个 Unity小知识点】 | Unity中的 eulerAngles、localEulerAngles细节剖析

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。...Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。...Unity 小知识点学习 Unity中的 eulerAngles、localEulerAngles细节剖析 Unity中的 rotation 、 localRotation 和 eulerAngles、...localEulerAngles都是用来表示旋转的一个API 不同的是rotation和localRotation是Quaternion类型,返回一个四元数(x,y,z,w)(0,1) 而eulerAngles...是返回本地旋转四元数信息。

    2.4K20

    科普:零基础了解3D游戏开发

    摆好后,我们会发现,在保持z轴和y轴正方向相同的情况下,x轴的正方向是相反的。这就是左手坐标系和右手坐标系的区别。LayaAir引擎unity导出插件就是以x轴取反来自动适配LayaAir引擎。...LayaAir引擎提供了3×3的旋转矩阵Matrix3x3() 和4×4的变换矩阵Matrix4x4(),变换矩阵可用于平移、旋转、缩放计算。...3、欧拉角、四元数 欧拉角与四元数都是用于旋转计算的数学方法,刚刚介绍的矩阵明明也可以用于旋转计算,为什么要介绍这两种呢?...相对而言,3×3旋转矩阵需要9个数,欧拉角只需3个数(3维向量),四元数只需要4个数(4维向量),明显轻量了很多。那是不是欧拉角最优,也不尽然。...尽管欧拉角内存占用小,也更加易用,但欧拉角也有他特有的问题,那就是可能会导致万向节死锁。而四元数则相对于矩阵内存占用小,也不受万向节死锁的困扰,而且在平滑插值方面只能是四元数才能完成。

    9.5K52

    裸眼 3D 是什么效果?

    当时觉得这个看起来不难,就尝试的实现了一下,将传统相机的轴锁定(lookAt)在“盒子”的正中心。 传统相机效果: 虽然也有“立体感”,但那是平常我们常见的“全景”专题的 3d。...投影矩阵可以渲染出红色方块的纵深,但是当相机旋转后将会出现方块的边“溢出”屏幕的情况: 而正常情况下,我们看一个现实中的 3d 盒子是这样的视角: 这时候的投影是一个不规则的四边形,直接计算这个四边形的范围是很困难的...也就是说,alpha 图也可以画成这样: 这几张手机转动的都是 alpha 角,而不是只有当手机绕着垂直于屏幕的 z 轴旋转才触发 alpha 角。...了解了陀螺仪角度真正含义后,我们就可以把陀螺仪返回的角度值,先转为欧拉角,再计算四元数(避免万向节锁): var quaternion = new THREE.Quaternion(); var euler...,具体四元数的对应关系可以查看Visualizing quaternions 通过四元数记录手机选择角度,然后将裸眼 3d 相机位置按照对应转动角度反向转动,即可实现陀螺仪操控的裸眼: 假设相机的初始位置是

    1.7K20

    8_姿态的其他描述及一般坐标系映射

    常用的有RPY角,欧拉角和四元数。...实质是一个绕固定坐标系的多个坐标轴旋转的问题。 有意思的是逆解问题:即从一个旋转矩阵等价推出X-Y-Z固定角坐标系。逆解取决于求解一组超越方程:已知一个旋转矩阵,则有9个方程和3个未知量。...四元数可以看作是一种实数和向量表达的一般形式,实数可看作是虚部为0的四元数,而向量可看作为实部为0的四元数,也被称为纯四元数。任意的三维向量都可以转化为纯四元数。...四元数具有下列特点: ①可避免万向节死锁 ②几何意义明确,只需4个数就可以表示绕过原点任意向量的旋转 ③计算效率高 ④比欧拉角多了一个维度,理解困难 2.一般坐标系的映射与齐次矩阵 经常有这种情况:已知矢量相对坐标系...在其他领域,可被用于投影和比例运算。它可以看做用一个简单的矩阵形式表示了一般的旋转和平移,即一种线性变换,该变换(常用齐次变换)可以定义一个坐标系。

    26810

    Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)

    1.前言 ObjectManipulator 允许使用任何输入设备或形式直观地操作 3D 空间中的对象。...我们在检查器中将此属性的别名设置为更具体的名称 Multiselect Mode,以避免与 MRTK Selection Mode 混淆,后者用于指定可交互对象是否可切换。...有关详细信息,请参阅Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束) 4.操作逻辑注入 开发人员无需为脚本设置子类或以其他方式修改脚本本身即可自定义...RotationAnchorNear 物物体单手接近时的旋转行为 RotationAnchorFar 物体单手远距离旋转行为 MoveLerpTime 输入数量代表的数量平滑适用于运动。...平滑0表示没有平滑。最大值意味着不改变值。 RotateLerpTime 输入表示要应用到旋转的平滑量的值。平滑0表示没有平滑。最大值意味着不改变值。

    19910

    一篇上手LayaAir的3D物理引擎

    这种限制物体运动,避免其运动超出一定限度的物理方法就是约束。由于其还具有着关节的特性表现,所以有些引擎也称为关节。...可以设置的值分别是:自由移动Free、锁定移动 Locked、限制性移动 Limited。 自由移动Free就是不作限制的沿某轴移动。 锁定移动 Locked是没有运动,完全固定住。...,也是根据自由移动Free、锁定移动 Locked、限制性移动 Limited三种值的设置来区别约束模式,与(X\Y\Z)Motion类似,只是运动形式的线性平移和角运动旋转的区别。...3.3.10 弹簧角运动限制(angularLimitSpring、angularDamp) 在Unity中,弹簧的角运动旋转限制分为X轴旋转限制Angular X Limit Spring以及Y轴和Z...在LayaAir引擎中需要分别设置旋转角度限制的最小值minAngularLimit和旋转角度限制的最大值maxAngularLimit。这两个值都是3D向量值。

    4.8K10

    Unity面试刷题库

    答:法线贴图:是一种特殊的纹理,可以应用在3D表面,让低模呈现出更明显的凹凸效果。...一般应用在CG动画、美术效果要求较高的单机游戏 CG动画:游戏中的CG动画其实是用3D模拟引擎制作的游戏短片,一般画面效果比较真实。 线程和协程 18.Unity3D是否支持写成多线程程序?...4个元素中,一个是实部,其余3个是虚部 作用:四元数用于表示旋转 优点: 1)能进行增量旋转 2)避免万向锁 3)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式) 四元数不会有欧拉角存在的...gimbal lock 问题[万向节死锁] 四元数由4个数组成,旋转矩阵需要9个数 两个四元数之间更容易插值 四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化 (...orthogonalize),对四元数规范化更容易 与旋转矩阵类似,两个四元组相乘可表示两次旋转 摄像机 22.在场景中放置多个Camera并同时处于活动状态会发生什么?

    4.1K12
    领券