gpt4 book ai didi

java - JOML(使用 LWJGL) - 从 rx、ry 和 rz 值获取旋转矩阵?

转载 作者:行者123 更新时间:2023-11-30 06:29:58 31 4
gpt4 key购买 nike

我一直在使用添加了 JOML 的 LWJGL 作为创建 3D 游戏引擎的方法。自从我松散地遵循 Jeffrey ( YouTube ) 的教程以来,我遇到了一个问题,但我一直在使用 JOML 库而不是他创建的迷你数学库。我创建了一个 Transform 类,该类是从 Jeffrey 的数学库复制的,并且我已将其翻译为使用 JOML:

import org.joml.Matrix4f;
import org.joml.Vector3f;

public class Transform {
public static Matrix4f getPerspectiveProjection(float fov, int width, int height, float zNear, float zFar) {
return new Matrix4f().setPerspective(fov, width / height, zNear, zFar);
}

public static Matrix4f getTransformation(Vector3f translation, float rx, float ry, float rz, float scale) {
Matrix4f translationMatrix = new Matrix4f().setTranslation(translation);

// The first problem:
Matrix4f rotationMatrix = new Matrix4f().getRotation(rx, ry, rz);

Matrix4f scaleMatrix = new Matrix4f().initScale(scale);

return translationMatrix.mul(rotationMatrix.mul(scaleMatrix));
}

public static Matrix4f getViewMatrix(Camera camera) {
Vector3f pos = camera.getPosition();

Matrix4f translationMatrix = new Matrix4f().setTranslation(-pos.x, -pos.y, -pos.z);
Matrix4f rotationMatrix = new Matrix4f().initRotation(camera.getForward(), camera.getUp());

return rotationMatrix.mul(translationMatrix);
}
}

从 JOML 文档中,我能找到的只是使用 Matrix4f.getRotationAxisAngle4f

问题的关键是,如何将 rxryrz 角度转换为 AxisAngle4f

最佳答案

请非常仔细、彻底地阅读 JOML 方法的 JavaDocs。 Matrix4f.getRotation() 检索(仿射)矩阵的旋转部分,并将该旋转转换为表示相同旋转的轴角度。该方法不会从三个欧拉角创建/构建旋转矩阵。

因此,要非常准确地陈述/改述您的问题:“如何构建一个仿射 4x4 矩阵来表示给定三个欧拉角(即分别绕 X、Y 和 Z 轴的角度)的 3D 旋转,并按 X、Y、Z 的顺序应用旋转?”

答案是:Matrix4f.rotationXYZ() 或后乘Matrix4f.rotateXYZ()。如果您需要不同的旋转顺序,您还可以查看其他“混合”的rotationYXZ/ZYX和rotateYXZ/ZYX方法,甚至可以在给定旋转轴和的情况下对Matrix4f.rotate()应用三个调用角度。

我建议您还查阅 GitHub 项目上的 Wiki 以及 GitHub 上 joml-lwjgl3-demos 项目的源代码。

关于java - JOML(使用 LWJGL) - 从 rx、ry 和 rz 值获取旋转矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380577/

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