为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2021-11-18 20:49:44
我有使用 3 个欧拉角(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);这有效,但我想使用它的向前/向右/向上向量显示模型。怎么做?
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


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


所以 3 轴为xAxis, yAxis,zAxis并且位置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

);


查看完整回答
反对 回复 2021-11-18
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信