亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號