Jest to prawdopodobnie bardzo podstawowy problem, ale nie znalazłem jeszcze rozwiązania i to mnie wkurzyło. Chciałbym pokazać strzałki wskazujące kierunki współrzędnych świata (x, y, z) w prawym dolnym rogu kamery, tak jak to się dzieje w Mayi, tak aby podczas obracania aparatu wokół obiektu lub poruszania się po scenie nadal możesz określić kierunki współrzędnych świata. Próbowałem tego dokonać za pomocą dwóch różnych podejść i żadne z nich nie zadziałało tak daleko.Three.js: Pokaż światowe osie współrzędnych w rogu sceny
Mam obiekt z trzema strzałkami jako dzieci używające klasy THREE.ArrowHelper
, na razie nazwiemy to XYZ
. Pierwsze podejście polega na uczynieniu z XYZ
dziecka sceny i dostarczeniu mu pozycji obliczonej z aktualnej pozycji kamery oraz przesunięcia w kierunku wskazywanym przez kamerę i regulacji, tak aby pojawiła się w rogu, w którym chcę, zamiast w środek ekranu. Już prawie udało mi się to zrobić, ponieważ na strzałkach zachowano prawidłową rotację, ale pozycja jest trochę zabawna i przestałem jechać tą trasą, ponieważ podczas przesuwania kamery było naprawdę "roztrzęsione". Nie jestem pewien, czy to był problem z wydajnością, czy coś innego.
Druga metoda polega na uczynieniu XYZ
dzieckiem kamery z lokalnym przesunięciem pozycji, a następnie odwróceniem obrotu kamery i zastosowaniem odwróconego obrotu do XYZ
, aby dopasować współrzędne światowe. Wydaje mi się, że blisko używam tej metody, ale mogę albo uzyskać poprawne położenie, albo obrót jest poprawny, a nie oba.
Aktualnie używam kodu XYZ.matrix.extractRotation(camera.matrixWorldInverse);
, aby zapewnić mi prawidłową orientację dla XYZ
, ale jego pozycjonowanie jest wyłączone. Jeśli używam XYZ.matrixWorld.extractRotation(camera.matrixWorldInverse);
, pozycja pozostaje dobra (dołączona do aparatu), ale orientacja się nie zmienia.
Jeśli ktoś ma szybki hack, aby to działało, byłoby to bardzo cenne. Jeśli masz lepszą metodę, niż ta, którą ścigam, to też byłoby to pomocne.
** - EDIT - ** Należy wspomnieć, że prawdopodobnie można znaleźć wersję roboczą tutaj - (https://googledrive.com/host/0B45QP71QXoR0Mm9Mbkp3WGI1Qkk/) Jestem przechowywania mojego kodu w Dysku Google, ale pracuje lokalnie przy użyciu wamp i aliasingu, co oznacza, że wszelkie zmiany robię lokalnie uzyskać odzwierciedlenie w Internecie, jak tylko dysk Google zsynchronizuje. TO ZNACZY. może być zepsuty, gdy spojrzysz.
Nieodebrane połączenie. Przyjrzę się tej metodzie i wrócę do ciebie. Zastanawiam się jednak, czy dodanie drugiej kamery zmniejszy wydajność bardziej niż uzyskanie jednej z powyższych metod do pracy? – wackozacko
To działa! Musiał usunąć linię 'camera2.position.sub (controls.target);' ponieważ OribtControls.js nie utrzymuje docelowej pozycji, ale w przeciwnym razie rozwiązanie jest praktycznie takie samo. – wackozacko
Nie usuwaj linii. Użyj 'controls.center' w r.58. – WestLangley