万向节死锁

要理解万向节死锁的产生原因,首先要理解欧拉角变换,欧拉角变换是基于最初始的坐标进行变换而非变换后的坐标进行变换。

欧拉角变换需要空间中的三个角(即变换后每个轴的偏移量),另外还有每个轴的变换顺序。值得注意的是,如果按照不同轴的顺序来改变每个角,其变换的结果是不一样的。

在Unity中,变换顺序为Y>Z>X

所以先对Y轴变换,就不会影响Z和X轴

初始时物体:

对Y轴旋转90°:

旋转X轴:正常

旋转Z轴:正常

对Z轴进行变换,根据理论,由于Y轴的变换顺序高于Z轴,故Z轴先进行改变,就不符合Unity原有的变换顺序,必然在旋转轴时会发生"异常":

先旋转Z轴90°:

再旋转X轴:

发现物体却是绕Y轴进行旋转,但是别忘了:由于事先旋转了Z轴,导致初始坐标的X,Y轴发生了变换,而欧拉角变换却是基于初始坐标轴来变换的

旋转Z轴90°,那么相当于X,Y轴交换了,所以从人的视觉效果上看起来,转动X轴时看上去是转动Y轴(其实是转动初始坐标系的X轴)

转动Y轴:

果然,转动Y轴时,视觉看上去却是围绕X轴进行旋转。

如果先转动X轴又会发生说明情况呢:

先转动X轴90° :

转动Y轴:

看上去是绕Z轴旋转

转动Z轴:

看上去仍是绕Z轴旋转。

这便是万向节死锁,在X轴旋转至90°时,不论是操作Y/Z轴,其效果都是一样的,相当于丢失了一个自由度。

为了解决这个问题,四元数就是个很好的方法,下期我将介绍一下四元数。

相关推荐
学究天人9 小时前
数学公理体系大全:第十四章 向量空间与模:线性代数的公理化与推广
线性代数·算法·矩阵·动态规划·抽象代数
Young Doro21 小时前
SAC 算法
线性代数·算法·机器学习
玖玥拾1 天前
C# 语言进阶(十四)Unity UI界面开发 + 网络消息联动
服务器·开发语言·网络·ui·unity·c#·游戏引擎
学究天人1 天前
数学公理体系大全:第五章 序数与基数理论:超限算术与集合的大小
人工智能·线性代数·算法·机器学习·数学建模·原型模式
学究天人1 天前
数学公理体系大全:第六章 选择公理的等价形式及证明
人工智能·线性代数·算法·机器学习·数学建模·概率论·原型模式
野区捕龙为宠1 天前
Unity 持久化数据
unity·游戏引擎·lucene
码云骑士1 天前
61-LangChain-vs-LlamaIndex-选型对比-功能矩阵-混用实践
python·线性代数·矩阵·langchain
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 17:纹理技术从基础原理到多场景实战应用
c++·unity·游戏引擎·图形渲染·three.js·opengl·unreal
_ZHOURUI_H_2 天前
MyFramework: 同样是 Unity 游戏开发框架,和 HTFramework 的设计取向有什么不同?(下)
unity·游戏引擎·游戏开发·游戏ui·手游开发
modest_laowang2 天前
一个机器人中的配准问题
线性代数·机器人·配准