gpt4 book ai didi

javascript - 如何使用 3 个向量(向前、向右、向上)旋转模型

转载 作者:行者123 更新时间:2023-11-29 20:30:50 25 4
gpt4 key购买 nike

我有使用 3 个欧拉 Angular (aRotX、aRotY、aRotZ)在其位置(aX、aY、aZ)显示模型的代码:

var m = mat4.create();
mat4.identity(m);
mat4.translate(m, [aX, aY, aZ]);
mat4.rotateX(m, aRotX);
mat4.rotateY(m, aRotY);
mat4.rotateZ(m, aRotZ);

这可行,但我想使用它的向前/向右/向上矢量显示模型。如何做到这一点?

最佳答案

如果您有 3 个向量表示对象 3 轴的对齐方式,以及一个坐标,您可以手动构建一个矩阵来根据这 4 个向量定位该对象。

轴向量 {x,y,z} 的长度应表示沿该轴的比例。如果对向量进行归一化,比例将为 1。将向量相乘以缩放对象。

所以 3 轴 xAxisyAxiszAxis 和位置 coord 在世界空间中

作为数组的 4 x 4 矩阵

const matrix4 = new Float32Array([
xAxis.x, xAxis.y, xAxis.z, 0,
yAxis.x, yAxis.y, yAxis.z, 0,
zAxis.x, zAxis.y, zAxis.z, 0,
coord.x, coord.y, coord.z, 1
]);

或者

const matrix4 = new Float32Array([...xAxis, 0, ...yAxis, 0, ...zAxis, 0,  ...coord, 1]);

或者使用创建mat4

const mat = mat4.create().fromValues(...xAxis, 0, ...yAxis, 0, ...zAxis, 0,  ...coord, 1);

请记住,轴向量的长度与该轴成比例。

有时 3 轴并不完全垂直,可能会使物体倾斜。您可以使用 2 轴的叉积来找到第 3 轴。例如,z 轴未知或未对齐。

const mat = mat4.create().fromValues(
...xAxis, 0,
...yAxis, 0,
...vec3.cross(vec3.create(), xAxis, yAxis), 0,
...coord, 1
);

关于javascript - 如何使用 3 个向量(向前、向右、向上)旋转模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58366054/

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