gpt4 book ai didi

c++ - 围绕一个点(行星)向不同方向移动

转载 作者:行者123 更新时间:2023-11-28 02:36:02 26 4
gpt4 key购买 nike

我正在开发一款涉及绕行星移动的游戏,目前已经让玩家使用前进和后退的方式朝一个方向移动:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com