2014-08-31 171 views
1

我已經做了13年的矢量東西了,但我仍然在用three.js處理東西的方式掙扎。所以我最喜歡做的事情是用風扇始終面向相機,當然也是旋轉的。three.js旋轉面對象

這是我用另一種語言來實現這一點:

// Create a vector facing in camera direction. 
temp.x = 0; 
temp.y = 1; 
temp.z = 0; 
vec_rotate(temp, camera.pan); 

// Apply vector direction to scene object. 
vec_to_angle(entity.pan, temp); 

// Rotate scene object's angle around another angle/imaginary line from camera to object. 
ang_rotate(
    entity.pan, 
    vector(random(360), 0, 0) 
); 

因此,應用entity.lookAt(camera.position)後,我缺少一個角度旋轉基於當前角度(最後函數調用例)。到風扇建模

回答

3

一種方式是像這樣:

var fan = new THREE.Mesh(...); 

var pivot = new THREE.Object3D(); 
scene.add(pivot); 
pivot.lookAt(camera.position); 

pivot.add(fan); 

然後在動畫循環(假定默認風扇網格面向正的z軸),

fan.rotation.z += 0.01; 

3。 js r.68

+1

不幸的是,我看不到任何區別,只是離開整個樞軸部分,但你的答案指出我的孤獨,這是... 我nitialization: 'var angle = 0; var axis = new THREE.Vector3(0,0,1);' Loop: 'angle + = 0.01 * deltaTime; mesh.lookAt(camera.position); mesh.rotateOnAxis(axis,angle);' 現在,「風扇」在旋轉時總是面向相機。因此在我的例子中,rotateOnAxis(...)似乎只是ang_rotate(...)的功能。 – Artimus 2014-08-31 18:21:25

+0

1.我的解決方案計算量小得多,因爲您只需調用一次'lookAt()'。 2.您找不到解決方案,您找到了不同的解決方案。 3.你可以使用'旋轉Z(角度)'。 – WestLangley 2014-08-31 19:17:08

+0

這絕對是真的。我不知道爲什麼它在我實施時不起作用,但最後,對於我的特殊情況,我只需要進行一次定向和旋轉,因爲它是一種只能持續很短時間的能量釋放。我很高興我終於找到了解決方案,因爲我在昨天掙扎了至少5個小時...... – Artimus 2014-09-01 16:09:12