2013-08-27 12 views
14

Wyświetlam element OBJ z Three.js przy użyciu WebGlRenderer, teraz chciałbym umożliwić użytkownikom obracanie kamery wokół obiektu w dowolnym kierunku, znalazłem tę odpowiedź :Obróć kamerę wokół obiektu za pomocą Three.js

Rotate camera in Three.js with mouse

Ale oba przykłady powrócić mi błędy, pierwszy mówi, że projektor nie jest zdefiniowany, a ja nie wiem, co to znaczy „z projektora”. Mam tylko prosty aparat, przedmiot i trochę światła. Drugi kod mówi, że undefined nie jest funkcją.

Czy ktoś wie, jak uzyskać wynik, którego potrzebuję?

Odpowiedz

29

To jest to, co chcesz: http://threejs.org/examples/misc_controls_orbit.html

Dołącz kontroli orbity (po pobraniu ich):

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

konfiguracji zmiennej:

var controls; 

przymocować kontroli do aparat i dodaj słuchacza:

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

iw swojej funkcji ożywionej aktualizują kontrole:

controls.update(); 

[Aktualizacja] controls.autoRotate = true; (testowane w V73. Najnowsze wersje OrbitControls.js dodały tę kontrolę.)

+0

Dziękuję, ale teraz jest przedmiot, który obraca się wokół aparatu ... w jaki sposób mogę odwrócić to zachowanie? dzięki –

+1

@FezVrasta Możesz wybrać, co orbitować, więc zamiast kamery możesz umieścić tam obiekt, jeśli chcesz na przykład "sferze", więc byłoby to: nowe TRZY.OrbitControls (kula); –

+0

Dzięki, ale nie mogę sprawić, żeby działało, używam tego kodu do załadowania OBJ: http://jsfiddle.net/7aqmB/, ale jeśli użyję _object_ in ** OrbitControls ** to mówi, że obiekt jest niezdefiniowany ... –

1

Rzeczywiście, jeśli zastąpisz "kamerę" wybranym obiektem, obiekt obróci się. Ale jeśli otaczają go inne obiekty (na przykład siatka na podłodze), będą nadal stać. To może być to, czego chcesz, albo może wyglądać dziwnie. (? Wyobraźmy sobie krzesło obracanie pływające nad podłogą ...)

wybrać, aby zastąpić obiekt centralny z OrbitControls.JS z mojego kodu po uruchomieniu Orbit Kontroluje

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

(Zastrzeżenie: mam wrażenie są różne wersje OrbitControls.js, ale zakładam, że wszyscy używają tego obiektu centralnego)

Powiązane problemy