2013-08-27 85 views
14

我使用WebGlRenderer顯示帶有Three.js的OBJ元素,現在我想允許用戶在任何方向圍繞對象旋轉相機,我已經找到了這個答案:使用Three.js在物體周圍旋轉相機

Rotate camera in Three.js with mouse

但是這兩個例子返回我的錯誤,第一個說,投影機沒有定義,我不知道它與「投影機」的意思。我只是一個簡單的相機,物體和一些光。 第二個代碼表示未定義不是函數。

有人知道如何得到我需要的結果嗎?

回答

29

這是你想要什麼:http://threejs.org/examples/misc_controls_orbit.html

包括軌道控制(你已經下載了它們之後):

<script src="js/controls/OrbitControls.js"></script> 

設置變量:

var controls; 

裝上控制到攝像頭並添加聽衆:

controls = new THREE.OrbitControls(camera); 
controls.addEventListener('change', render); 

,並在你的動畫功能更新的控件:

controls.update(); 

[更新] controls.autoRotate = true;(在V73測試。最近版本的OrbitControls.js已經添加了這個控件。)

+0

謝謝,但現在是圍繞相機旋轉的項目......我如何反轉行爲?謝謝 –

+1

@FezVrasta你可以選擇什麼軌道,所以而不是相機,你可以把一個對象,如果你喜歡例如「球」,所以它會是:新THREE.OrbitControls(sphere); –

+0

謝謝,但我不能使它的工作,我使用此代碼來加載OBJ:http://jsfiddle.net/7aqmB/但如果我在** OrbitControls **中使用_object_它說該對象是未定義的... –

1

的確,如果用您選擇的對象替換'camera',對象將會旋轉。但是如果周圍有其他物體(例如地板上的網格),它們仍然會靜止不動。這可能是你想要的,或者它可能看起來很奇怪。 (?想象一下在椅子旋轉浮動地板上面......)

我選擇從我的代碼覆蓋從OrbitControls.JS中心對象初始化後,軌道控制

controls = new THREE.OrbitControls(camera, renderer.domElement); 
… 
controls.center = new THREE.Vector3(
    chair.position.x, 
    chair.position.y, 
    chair.position.z 
); 

(免責聲明:我有印象有不同版本的OrbitControls.js左右,但我假設他們都使用這個中心對象)