作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一款涉及绕行星移动的游戏,目前已经让玩家使用前进和后退的方式朝一个方向移动:
if( forward)
yAngle = yAngle + 0.005f;
if( backward)
yAngle = yAngle - 0.005f;
if(left)
zAngle = zAngle - 0.005f;
if(right)
zAngle = zAngle + 0.005f;
然后将这些角度放入矩阵。
角色使用 Z 旋转完美旋转,并使用 Y 旋转围绕行星前后移动,但只会朝那个方向移动。
我将如何计算 X 和 Y 旋转,以便角色以正确的方向围绕行星移动?
最佳答案
绕 3D 笛卡尔坐标系 x 轴旋转的旋转矩阵是
1 0 0
0 cos(xAngle) sin(xAngle)
0 -sin(xAngle) cos(xAngle)
绕y轴旋转的矩阵是
cos(yAngle) 0 -sin(yAngle)
0 1 0
sin(yAngle) 0 cos(yAngle)
绕z轴旋转的矩阵是
cos(zAngle) sin(zAngle) 0
-sin(zAngle) cos(zAngle) 0
0 0 1
您可以通过反转其正弦项的符号来反转任何这些矩阵的旋转方向。
然而,关于两个轴的组合旋转没有唯一的定义或矩阵,因为结果取决于执行旋转的顺序。与您的情况特别相关的是,如果旋转是在一系列小的交替步骤中执行的,它仍然是不同的。
因此,与其跟踪整体旋转角度,我建议保留一个描述当前方向的变换矩阵(例如,当前到船的方向是 M
* (1, 0, 0)).通过将其乘以描述自上次更新以来的移动的上述形式的增量旋转矩阵,在每个刻度上或根据需要更新它。这应该可以让您流畅地移动并与直观的控制保持一致。
关于c++ - 围绕一个点(行星)向不同方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27411185/
我是一名优秀的程序员,十分优秀!