2013-04-10 8 views
5

Próbuję przenieść kostkę w pliku three.js na podstawie jej obrotu, ale nie wiem, jak go wykonać.Przenoszenie obiektu na podstawie jego obrotu w pliku three.js

Od tej pory mogę obracać obrót sześcianu za pomocą klawiszy A &. Za pomocą klawisza W chciałbym, aby przesunął się do przodu w stosunku do swojego obrotu.

z 2D Chciałbym więc coś wzdłuż linii:

float angle = GradToRad(obj.rotation); 
obj.x = obj.x + cos(angle) * velocity; 
obj.y = obj.y + sin(angle) * velocity; 

Oto obraz bieżącej realizacji. 3D Cube three.js

Jak mogę zastosować coś podobnego w pliku three.js?

Odpowiedz

7

Obiekty można uważać za skierowane w ich pozytywną oś Z. Tak, aby przenieść obiekt do przodu w stosunku do jego własny układ współrzędnych, można użyć

Object3D.translateZ(distance); 

Three.js r.57

+0

Tak, ale tylko tłumaczenie wzdłuż osi Z nie pozwoli mojemu obiektowi poruszać się względem jego obrotu. To znaczy, gdy odwracam się wokół obiektu, pragnę, aby poruszał się wzdłuż jego "licowania". – Placeable

+0

W którym kierunku Twój obiekt "twarzą", gdy jest to wektor rotacji (0, 0, 0)? To jest lokalny kierunek, w którym chcesz się poruszać po zastosowaniu rotacji. – WestLangley

+0

I roatate wokół osi Z. – Placeable

0

Najłatwiej wyrazić zarówno obrót, jak i tłumaczenie w jednym (homogenicznym rzutniku) 4×4 matrix. Członek 01.w pliku three.js już to robi, chociaż być może trzeba będzie ustawić matrixAutoUpdate na false, aby użyć go bezpośrednio. Następnie możesz przenieść używając metody translate, aby przesunąć obiekt w jego własnej ramce odniesienia.

+0

Jest wysoce nie zalecane dla użytkowników, aby zadzwonić z macierzy obiektów bezpośrednio w pliku three.js. Zrób to tylko, jeśli naprawdę wiesz, co robisz i znasz wewnętrzne funkcjonowanie biblioteki. – WestLangley

0

Twoja metoda 2D jest dokładnie jak to zrobiłem w three.js. Dla pozycji Y używam techniki kolizji terenu (która nadal wymaga pracy);