2015-08-18 232 views
0

使用OrbitControls在three.js中旋轉場景,我想要一個planeMesh對象始終面向相機。我正在嘗試以下內容,但它只是瘋狂地旋轉(似乎處理器密集型),但它看起來像當我用鼠標圍繞場景(移動相機)時,它會試圖保持前方。我試圖讓它只在相機移動時慢慢重新定位。我在這裏做錯了什麼?three.js:平滑地旋轉與OrbitControls相反的對象camera.rotation.y

Here's a plunker

下面是相關的JS:

function animate() { 
    requestAnimationFrame(animate); 

    planeMesh.rotation.y -= Math.PI /camera.rotation.y; 

    render(); 
} 

我也試過以下(沒有也行):

function animate() { 
    requestAnimationFrame(animate); 
    var a = camera.rotation.y; 
    var b = camera.rotation.y; 

    if (a == b) { 
     planeMesh.rotation.y -= Math.PI /camera.rotation.y; 
     } else {  
    } 

    render(); 
    a = camera.rotation.y; 
} 

**編輯 我想cameraplaneMesh保持目前的關係。 這裏是開始旋轉: planeMesh Rotation y = 3.141592653589793 camera Rotation y = -0.06894749489830237

不過,我覺得相機使用THREE.Euler,並planeMesh使用Math.PI旋轉,所以......使用不同的系統,這兩個旋轉測量?

當然,如果我能得到起點的差異,那麼只有當差異更大,並且差異比起始差異更大時才更改planeMesh rotation.y,那麼我將完成我的目標。但我該怎麼做?我是否必須以某種方式翻譯這兩種測量系統?當我旋轉場景時,相機確實使用了不同的測量比例。

回答

2

確保飛機始終面向相機的最簡單方法是簡單地將其連接到相機而不是場景,例如, camera.add(planeMesh);並將飛機相對於相機進行定位。然後他們的旋轉總是自然對齊。

另外,如果兩者是相同的父(通常爲場景)的兒童,使用planeMesh.lookAt(camera.position);

+0

啊!輝煌!很簡單。謝謝! –