您好,欢迎来到数字资产交易所牌照有限公司公司网站!

0523-82625988
数字资产交易所牌照有限公司
您的位置:首页 > 新闻资讯 > 公司资讯

新闻资讯

联系我们

数字资产交易所牌照有限公司

地址:靖江市城北园区中心港路团结园A区8号
电话:0523-82625988

咨询热线133 3889 8275

万向节死锁如何理解

发布时间:2019-05-25人气:0

死锁的原理就不再赘述了,主要是对引见视频中讲的现象有点不是很了解。视频讲到Gimbal Lock的时分提到x,y,z三个坐标轴是有附属关系(hierarchical system)的,也就是说关于如图所示的系统,绕y轴旋转的时分x,z轴都会随着改动;绕x旋转的时分z轴会改动;绕z旋转的时分y,x都不会变,正是由于这样,所以当物体绕x旋转90°时y轴与z轴会处在同一平面,此时DoF就会减少1,招致了Gimbal Lock的现象。

死锁的理解

但是当你想到它时,你会认为旋转一个物体后,世界坐标系永远不会改变,局部坐标系会随着物体的位置而变化,这意味着x,y和z轴将会按照对象。 

旋转变化,视频中提到的情况实际上并不出现在这种情况下。那么Gimbal Lock正在发生什么呢?  

首先,让我们看看Unity3D如何在其中旋转,如其他人的博客所述。  Transitor中Transform组件的旋转轴是父节点的模型空间坐标轴。如果没有父节点,则旋转轴是世界空间轴。  

脚本使用旋转功能在Space.World中旋转,旋转轴是坐标轴世界坐标系。  

旋转功能用于在Space.Self中旋转,旋转轴是局部坐标系的坐标轴。

并且在文章中还做了实验:

1. 静态欧拉角

这种情况对应着上面所述的使用Space.World进行旋转,以及Inspector中的旋转。即使旋转轴在旋转的过程中保持不变,旋转的顺序会决定最后的旋转结果。我们看下面的例子会很清晰的理解:

情形一:首先绕世界坐标系的x轴旋转90度,再绕世界坐标系的y轴旋转90度

情形一

情形二:首先绕世界坐标系的y轴旋转90度,再绕世界坐标系的x轴旋转90度

情形二:首先绕世界坐标系的y轴旋转90度,再绕世界坐标系的x轴旋转90度

可以看出,由于旋转顺序不同,旋转结果的不同结果的结果是矩阵乘法不满足交换律,但在我自己的Inspector测试中,发现第一种情况或第二种情况案件轮换。 

结果是我没有测试的相同脚本情况,文章中提到的现象应该针对脚本的情况,然后我做了第二次实验,想看看Inspector中的对象是否根据到世界坐标系或局部坐标

旋转,然后似乎对象有时围绕世界坐标旋转,有时围绕局部坐标,有时似乎它不绕两个旋转,它是什么? 

经过一些测试,得出的结论是假设物体的初始状态没有任何旋转是A,旋转的值变为x1,y1,并且z1之后获得的状态是B.这次,B的位置是zxy的顺序。 

通过将物体从初始状态A围绕z轴,y轴和x轴世界坐标系旋转角度z1,y1和x1来获得文档中提到的顺应性。 

如果此时Rotation的值更改为x1,y1和z2,则称其为状态C.然后,对象的更改实际上不会围绕z轴旋转z2-z1角度B的基础,但是重新处于A状态。 

基于重新计算旋转角度x1,y1,z2,获得状态C. 

然后对象从当前状态B转换,因此我们观察到的现象是对象不必根据局部坐标系或世界坐标系进行旋转。\

具有上述知识,我们可以解释检查员轮换中发生的万向节锁定现象。 

我们首先将旋转中的x值更改为90°,然后更改y的值和z的值。我们将发现改变这两个值的对象以相同的方向旋转。这种现象就是我们遇到的。 

万向节锁。 

原因是Unity每次有新的Rotation值时都会重新计算。对于90°,y1和z1的旋转角度,过程是首先围绕z轴旋转对象z1°,然后 x轴旋转90°,z轴移动到当前世界坐标系的y轴的位置,这意味着在y轴上旋转y1°的下一个操作实际上与围绕z轴的原始z1旋转的方向相同。 

这就是所谓的万向节锁定现象,它在世界坐标系中旋转静态欧拉角。 

在局部坐标系中旋转动态欧拉角之前的参考文章还提到,与世界坐标系不同,该对象以当前旋转坐标作为状态A进行操作。其他过程与上述类似,并且生成万向节锁。 

情况类似,所以我不再说了。

总而言之,视频中提到的从属关系实际上指的是三维旋转的合规性问题,正因为如此对象是的机制DoF将在一个旋转方向上丢失。这是万向节锁。 

解决方案是使用四元数旋转

0523-82625988
  • 数字资产交易所牌照有限公司

    微信二维码