gpt4 book ai didi

java - LWJGL 旋转物体

转载 作者:行者123 更新时间:2023-12-02 05:22:02 24 4
gpt4 key购买 nike

我试图让 2 个立方体以不同的方式旋转。

为了设置旋转,我这样做。

GL11.glRotatef(rot[0], 1.0f, 0.0f, 0.0f);
GL11.glRotatef(rot[1], 0.0f, 1.0f, 0.0f);
GL11.glRotatef(rot[2], 0.0f, 0.0f, 1.0f);

我没有使用 GL11.glLoadIdentity() 来重置旋转,而是在立方体类中执行类似的操作。

GL11.glRotatef(rot[0] * -1.0f, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(rot[1] * -1.0f, 0.0f, 1.0f, 0.0f);
GL11.glRotatef(rot[2] * -1.0f, 0.0f, 0.0f, 1.0f);

这应该重置每个轴的旋转。

数组“rot”保存 x、y 和 z 旋转,并通过立方体类中的这 3 个方法进行更新。

public void pitch(float angle) {
rot[0] = angle;
}

public void yaw(float angle) {
rot[1] = angle;
}

public void roll (float angle) {
rot[2] = angle;
}

单独地,每个“GL11.glRotatef(etc,etc,etc,etc)和GL11.glRotatef(etc * -1.0f,etc,etc,etc)”工作正常,但是当它们全部在一起时,会发生奇怪的旋转.

我不确定这是否与Gimbal Lock或我的代码有关,请帮忙。

提前致谢。

最佳答案

你的反演代码似乎是错误的。请注意,矩阵乘法不可交换:

相反

R(x) * R(y) * R(z)

(与您的三个rotatef调用类似)是

R(-z) * R(-y) * R(-x)

。这意味着您必须更改调用第二个 glRotatef 命令的顺序。

关于java - LWJGL 旋转物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445056/

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