[英]Rotating a vector around a sphere (simulating sun) in three.js
我正在嘗試修改此代碼(它本身是this的實現)。 我已經獲得了一般的可視化和渲染功能,但是現在我正在嘗試制作一些逼真的運動動畫。
光源的點由歸一化的向量確定(例如THREE.Vector3(1, 0.75, 0)
。該光似乎是從右上角發出的)。 現在,我想做的是使矢量圍繞球體旋轉,使球體圍繞光源旋轉。 但是我不知道該怎么做。 我試過更新/更改向量的位置。 但是我不確定如何計算正確的下一個x,y,z
值。 我試過應用歐拉角和旋轉矩陣,如下所示:
euler = new THREE.Euler(f,g,h, 'XYZ');
matrix = new THREE.Matrix4().makeRotationFromEuler(euler);
light = vector.applyMatrix4(matrix);
但是在這里,我不確定如何獲得正確的f,g,h
值,以使光不只是圍繞球體擺動。
我是否在正確的軌道上?
工作示例: http : //jsfiddle.net/VsWb9/3890/
您正在以歐拉角線性增加3個坐標中的2個,這就是問題所在。
對於除繞x / y / z軸以外的其他旋轉,理解/避免問題/編碼/計算成本的最佳方法是信任四元數 。
它們也很直觀,在threejs中也是如此。 它們由4個坐標組成:3個代表旋轉軸,第四個代表旋轉值。
var quat=new THREE.Quaternion();
//we set the axis around which the rotation will occur. It needs to be normalized
var axis=new THREE.Vector3(0,1,0).normalize();
//and the angle value (radians)
var angle=0;
//this is your light vector (=original position of your light)
var light=new THREE.Vector3(1,0,0).normalize();
然后在渲染循環中,更改角度值,並告訴四元數使用上面的軸,並更新角度:
angle+=.001//(or angle -= if your axis points in the +y direction like here)
quat.setFromAxisAngle(axis,angle);
最后應用它:
light.applyQuaternion(quat);
更新小提琴: http : //jsfiddle.net/Atrahasis/0v93p2xy/
關於歸一化向量的注意事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.