Это, вероятно, очень простая проблема, но я еще не нашел решение, и это меня прослушивало. Я хотел бы показать стрелки, указывающие направления координат мира (x, y, z) в нижнем правом углу камеры, как это сделано в Maya, так что при повороте камеры вокруг объекта или перемещении по сцене, вы все же можете определить направления мировых координат. Я попытался выполнить это, используя два разных подхода, и ни один из них не работал до сих пор.Three.js: Показывать координатные оси мира в углу сцены
У меня есть объект с тремя стрелками, как дети, используя класс THREE.ArrowHelper
, назовем его XYZ
. Первый подход состоит в том, чтобы сделать XYZ
ребенком сцены и предоставить ему позицию, рассчитанную из текущего положения камеры, плюс смещение в направлении, которое камера указывает и отрегулировать так, чтобы оно отображалось в углу, в котором я хочу, вместо того, чтобы центр экрана. Я почти получил эту работу, так как в стрелках поддерживается правильное вращение, но положение немного смешно, и я прекратил идти по этому маршруту, потому что это было действительно «неудобно» при перемещении камеры. Я не уверен, было ли это проблемой производительности или чем-то еще.
Второй способ состоит в том, чтобы сделать XYZ
ребенком камеры с локальным смещением положения, а затем отменить поворот камеры и применить обратное вращение к XYZ
, чтобы он соответствовал мировым координатам. Похоже, что я использую этот метод близко, но я могу либо правильно определить позицию, либо правильность вращения, а не то, и другое.
Я в настоящее время использую код XYZ.matrix.extractRotation(camera.matrixWorldInverse);
, чтобы обеспечить правильную ориентацию для XYZ
, но это позиционирование отключено. Если я использую XYZ.matrixWorld.extractRotation(camera.matrixWorldInverse);
, тогда положение остается точным (прикреплено к камере), но ориентация не меняется.
Если у кого есть быстрый взлом, чтобы получить эту работу, это будет очень признательно. Если у вас есть лучший метод, чем тот, который я преследую, это тоже будет полезно.
** - EDIT - ** вероятно, следует отметить, что вы можете найти рабочую версию здесь - (https://googledrive.com/host/0B45QP71QXoR0Mm9Mbkp3WGI1Qkk/) Я хранящую свой код в Google Диск, но работаю локально с помощью WAMP и сглаживание, что означает, что любые изменения, которые я сделать локально получать информацию в Интернете, как только синхронизация Google. И.Е. это может быть нарушено, когда вы посмотрите.
Пропущено эту ссылку. Я рассмотрю этот метод и вернусь к вам. Тем не менее, мне интересно, добавит ли вторая камера снижение производительности больше, чем использование одного из моих методов выше? – wackozacko
Он работает! Пришлось удалить строку 'camera2.position.sub (controls.target);' поскольку OribtControls.js не поддерживает целевую позицию, но в остальном решение практически одно и то же. – wackozacko
Не удаляйте линию. Используйте 'controls.center' в r.58. – WestLangley