繁体   English   中英

如何基于方向矢量计算旋转矩阵?

[英]How to compute the Rotation-Matrix based on a Direction-Vector?

在我的3D世界实现中,我使用Direction-Vectors(单位矢量)来确定3D对象的方向。

每个3D对象都有其自己的Direction-Vector,默认情况下其方向为V3(1,0,0),原点为V3(0,0,0)。

这就是我应用定向旋转矩阵“ D”的方式(矩阵“ A”用于将3D对象绕其Direction-Vector旋转为轴,这似乎工作正常)

Model3D model = actor.model;
// Loops through all the edges in the model
for (int i = 0; i < model.edges.length; i++) {
    M3 D = directionMatrix(actor);
    M3 R = rotationMatrix(actor);
    // Draws a line based on each edge in the model.
    // Each line consists of two points a and b.
    // The matrix R rotates the points around a given axis.
    // The D matrix rotates the points towards a given axis - not around it.
    S.drawLine(g,
        D.mul(R.mul(model.points[model.edges[i].a])).scale(actor.scale),
        D.mul(R.mul(model.points[model.edges[i].b])).scale(actor.scale)
    );
}

这是我计算当前方向旋转矩阵“ D”的方式:

public M3 directionalRotationMatrix(c_Actor3D actor) {
    double x =  Math.atan2(actor.direction.z, actor.direction.y);
    double y =  Math.atan2(actor.direction.x, actor.direction.z);
    double z =  Math.atan2(actor.direction.y, actor.direction.x);
    double sin_x = Math.sin(x), sin_y = Math.sin(y), sin_z = Math.sin(z);
    double cos_x = Math.cos(x), cos_y = Math.cos(y), cos_z = Math.cos(z);
    return new M3(
            cos_x * cos_y, (cos_x * sin_y * sin_z) - (sin_x * cos_z),
            (cos_x * sin_y * cos_z) + (sin_x * sin_z), sin_x * cos_y, (sin_x * sin_y * sin_z) + (cos_x * cos_z),
            (sin_x * sin_y * cos_z) - (cos_x * sin_z), -sin_y, cos_y * sin_z, cos_y * cos_z);
}

我的问题是创建一个正确的方向旋转矩阵,该矩阵会沿其各自的方向矢量的方向旋转3D对象。

我完全不确定我做错了什么...我的想法是首先将立方体向某个方向旋转,然后围绕该方向的轴旋转该立方体。 毕竟,位置转换等等。

谢谢您的帮助!

听起来好像您正在尝试将3D对象朝其前向矢量的方向移动。 为此,您将需要对象的位置(x,y,z)和3个向量(向前,向上和向右)。 您可以使用基于俯仰和横滚的矢量数学运算来旋转3个矢量(请参见下面的链接)。 对于向前运动,然后将对象的位置加上速度乘以向前矢量的速度相加,即:position + = speed * forward

使用此处发布的以下完整示例代码来了解如何实现自己的版本。 http://cs.lmu.edu/~ray/notes/flightsimulator/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM