2017-05-03 34 views
0

這裏是我想怎樣做:three.js所:旋轉everyting(包括攝像頭),儘管軌道控制器

當條件被驗證,我想在現場轉動的一切,包括攝像頭。

用戶不會說任何區別,因爲相機仍然顯示完全相同的東西,但事實上對象將被旋轉。

當然軌道控制器應該還是工作......

的問題可能是愚蠢的,但我有麻煩。要麼相機被移動,並不顯示完全相同的東西,或軌道控制器不起作用。

你會怎麼做?

謝謝。

編輯:我應該詳細說明我試過的東西。

所以,讓我們說我在我的場景中唯一的事情是每個臉上都有數字的立方體。

  • 面1指向+ X。
  • 面2指向+ Y。
  • 面3指向+ Z。
  • 面-1指向-X。
  • 面-2指向-Y。
  • 面-3指向-Z。

在我的代碼中的某個點,我希望多維數據集在用戶不知道的情況下旋轉。

  • 面1仍應指向+ X。
  • 面-1仍應指向-X。

但是:

  • 面2應該朝着+ Z點。
  • 面-2應指向-Z。
  • 面3應指向-Y。
  • 面-3應指向+ Y。

好嗎?

但我不希望用戶注意到這種旋轉。 所以我想在同一時間旋轉相機,以隱藏立方體旋轉的事實。

我的嘗試:

,當我想要旋轉X:

cube.rotateX(direction * Math.PI/2); 
camera.position.set(camera.position.x, direction * (-camera.position.z), direction * camera.position.y); 
camera.lookAt(new THREE.Vector3(0, 0, 0)); 

,當我想旋轉Y:可悲的是

cube.rotateY(-direction * Math.PI/2); 
camera.position.set((-direction) * camera.position.z, camera.position.y, -direction * (-camera.position.x)); 
camera.lookAt(new THREE.Vector3(0, 0, 0)); 

,雖然它的工作原理爲Y旋轉,它不適用於X旋轉,因爲camera.up會將它搞砸,並使其看起來像圍繞Y軸旋轉。

我該怎麼辦?

+0

旋轉場景中關於原點的所有內容只會影響其中對象的世界矩陣。如果這就是你想要做的,好的。但我們需要繼續努力。請分享您的代碼,並指出您迄今嘗試完成的效果。 [如何創建一個最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve) – TheJim01

+0

你是對的。我編輯添加更多信息。 – AAAAAAAAAA

回答

1

嘗試創建一個THREE.Group並將當前場景中的所有內容添加到它(您的立方體,相機,燈光等)。然後旋轉組。

var group = new THREE.Group(); 
group.add(yourCube); 
group.add(yourLight); 
group.add(yourCamera); 
scene.add(group); 
// later... 
group.rotateN(90 * Math.PI/180); // whatever rotation function you choose to use 

從此刻添加到組中的任何內容都將使用該組的座標系。任何添加到場景中的東西都將繼續使用標準的世界座標系。

如果再次旋轉該組,該組內的任何內容都將隨之旋轉,但場景中的任何內容都將保留原位。