【问题标题】:JOML (with LWJGL) - Get rotation matrix from rx, ry, and rz values?JOML(使用 LWJGL) - 从 rx、ry 和 rz 值获取旋转矩阵?
【发布时间】:2017-09-23 14:21:41
【问题描述】:

我一直在使用添加了 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?

【问题讨论】:

    标签: java matrix lwjgl


    【解决方案1】:

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

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

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

    我建议你也参考 GitHub 项目上的 Wiki 以及 GitHub 上 joml-lwjgl3-demos 项目的源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多