Three.js: Pokaż osi współrzędnych świata w rogu sceny

Jest to prawdopodobnie bardzo podstawowy problem, ale nie znalazłem jeszcze rozwiązania i podsłuchiwało mnie. Chciałbym pokazać strzałki wskazujące kierunki współrzędnych świata (x, y, z) w prawym dolnym rogu aparatu, tak jak ma to miejsce w programie Maya, aby podczas obracania kamery wokół obiektu lub poruszania się po scenie, wciąż możesz zidentyfikować kierunki współrzędnych świata. Próbowałem tego dokonać przy użyciu dwóch różnych podejść i żadne z nich nie działało do tej pory.

Mam obiekt z trzema strzałkami jako dzieci za pomocąTHREE.ArrowHelper klasa, nazwiemy toXYZ na chwilę. Pierwsze podejście to zrobićXYZ dziecko sceny i nadaj mu pozycję obliczoną na podstawie bieżącej pozycji kamery plus przesunięcie w kierunku wskazywanym przez kamerę i wyreguluj ją tak, aby była widoczna w rogu, w którym ma być zamiast na środku ekranu. Prawie udało mi się to zrobić, ponieważ w strzałkach zachowuję prawidłową rotację, ale pozycja jest trochę zabawna i przestałem schodzić tą trasą, ponieważ była naprawdę „roztrzęsiona” podczas przesuwania kamery. Nie jestem pewien, czy był to problem z wydajnością, czy coś innego.

Druga metoda to zrobićXYZ dziecko kamery z przesunięciem pozycji lokalnej, a następnie odwróć obrót kamery i zastosuj odwrócony obrót doXYZ więc pasuje do współrzędnych świata. Przy tej metodzie wydaje mi się, że jestem blisko, ale mogę uzyskać poprawną pozycję lub poprawną rotację, a nie obie.

Obecnie używam koduXYZ.matrix.extractRotation( camera.matrixWorldInverse ); aby zapewnić mi właściwą orientacjęXYZ, ale jego pozycjonowanie jest wyłączone. Jeśli używamXYZ.matrixWorld.extractRotation( camera.matrixWorldInverse ); następnie pozycja pozostaje dobra (dołączona do kamery), ale orientacja się nie zmienia.

Gdyby ktoś miał szybki hack, żeby to zadziałało, byłoby to bardzo mile widziane. Jeśli masz lepszą metodę, niż ta, którą prowadzę, to również byłoby pomocne.

** - EDIT - ** Powinien prawdopodobnie wspomnieć, że możesz znaleźć działającą wersję tutaj - (https://googledrive.com/host/0B45QP71QXoR0Mm9Mbkp3WGI1Qkk/) Przechowuję mój kod w napędzie google, ale pracuję lokalnie za pomocą wampa i aliasingu, co oznacza, że ​​wszelkie zmiany, które wprowadzam lokalnie, są odzwierciedlane online, gdy tylko dysk google się zsynchronizuje. TO ZNACZY. może się zepsuć, gdy spojrzysz.

questionAnswers(3)

yourAnswerToTheQuestion