由于 tan(90)趋近无穷大,当计算值为Infinity skx 和 sky 分别做一个值限定。接下来看代码对应的矩阵变换。首先先从y到x的顺序,将Asky和Askx相乘得到一个复合矩阵。再左乘当前变换矩阵p,为了和前边对照,依然采用a b c d
矩阵乘法满足结合率,先将右边的两个矩阵相乘
所以通过矩阵乘法规则得到新的值
m00=a+c*sky m04=c+a*skx
m01=d+b*sky m05=d+b*skx
中篇相对于上篇,中间间隔了一个多月的时间,原创实属不易。这期间一直在恶补图形学和矩阵相关知识。最初分析版本2.0.10,当时代码中存在rotationX rotationY 旋转,当rotationX 和rotationY 不相等时,一直卡在那段代码的分析过程中。后来还去官方论坛提问 https://forum.cocos.com/t/topic/84680/4 ,没有得到满意的结果,也没多少人回复。后来各种查资料,才发现官方将那段代码移除了,采用欧拉角的方式。所有我将本地版本升级成v2.1.3版本。到这个版本后,又卡在了 let rotation = -this._eulerAngles.z这个负号问题。越分析越,感觉欠缺的越多,欧拉角,四元数。同时感觉可能写不出中篇了,不过我还是找了一个感觉是对的推导将中篇完成了。当然其中我觉得不清楚的地方还有
在2.0.10 版本中Y轴旋转和X轴选中问题,为啥可以根据Z轴旋转的结果一分为二
在2.1.3 版本中旋转取欧拉角z负号问题,旋转矩阵 b c 值相互取反问题
复合矩阵变换左乘右乘问题,在本文中我通过代码推导应该是左乘
倾斜变换Asky和Askx两个居中相乘顺序问题,本文通过y右乘x得到代码结果
欢迎感兴趣的朋友关注我的微信订阅号"小院不小",或者点击下方的二维码关注。我将多年开发中遇到的难点,以及一些有意思的功能,体会都会一一发布到我的订阅号中。需要本文demo可以在公众号中回复matrix
维护了一个Coscos Creator 的游戏开发群,欢迎喜欢聊技术的朋友加入
闲来无事,采用cocos creator开发了一个小游戏【坦克侠】,感兴趣的朋友一个可以来玩玩