簡體   English   中英

如何使用 3 個向量(前、右、上)旋轉 model

[英]How to rotate model using 3 vectors (forward, right, up)

我有使用3個歐拉角(aRotX,aRotY,aRotZ)在position(aX,aY,aZ)上顯示model的代碼:

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);

這可行,但我想使用它的前/右/上向量顯示 model。 怎么做?

如果您有 3 個向量表示對象 3 軸的 alignment 和一個坐標,您可以從這 4 個向量手動構建一個 position 矩陣。

軸向量 {x,y,z} 的長度應表示沿該軸的比例。 如果對向量進行歸一化,比例將為 1。將向量相乘以縮放 object。

所以 3 軸作為xAxisyAxiszAxiscoord在世界空間

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 軸並不完全垂直,可能會使 object 傾斜。 您可以使用 2 軸的叉積來找到第 3 軸。 示例 z 軸未知或未對齊。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM