threejs посмотреть на (вроде)

У меня есть геометрия формы в моей сцене, которая выглядит как стрелка, указывающая от одного объекта к другому. Добавлен взгляд прямо в камеру. Представьте, что камера направлена ​​на x, y (например, спереди см. первое изображение). Когда пользователь поворачивается «вправо» (z, x), вы будете смотреть в конец, поэтому ничего не увидите. это нормально, однако, поскольку он бесконечно тонкий, то же самое верно, если вы смотрите сверху / снизу, и когда вы начинаете наклонять его, вы не можете сказать, что это стрела, и это то, что я хочу предотвратить.

если вы используете lookat(camera.postion) во время рендеринга, то стрелка больше не будет находиться в исходном положении относительно двух объектов.

Единственный способ, которым я потенциально могу это представить, — это вращение стрелки вдоль одной оси при движении камеры?? я ищу любые другие предложениявведите описание изображения здесь

я приложил изображение, чтобы попытаться лучше объяснить Стрелка

По сути, я хочу, чтобы стрелка выглядела как стрелка, когда пользователь вращает сцену, а не исчезает, если смотреть сверху. Обратите внимание, что эти стрелки могут быть добавлены в любом месте/направлении, что немного усложняет задачу.


person user2445278    schedule 06.11.2017    source источник


Ответы (1)


Есть два варианта. Полностью трехмерный вариант и фальшивый двухмерный вариант.

А. Вариант 3D

Предположим, что у вашей стрелы есть основная ось (идущая от головы к хвосту) и дополнительная ось (перпендикулярная ее плоской форме). Что вам нужно сделать, так это рассчитать угол между положением вашей камеры и вторичной осью. Вот изображение, угол, который вы ищете, - это желтая дуга.

введите здесь описание изображения

Это довольно простые расчеты, которые здесь не приводятся, потому что неясно, как определяется ваша стрелка и какие оси XYZ являются первичными и вторичными.

Как только вы узнаете угол, вы можете повернуть стрелку вокруг ее основных осей на угол. Это повернет стрелку в положение с лучшей видимостью.

Обратите внимание, что если камера лежит на основной оси, угол не определяется. Но вы все равно не увидите ни одной стрелки из этого положения камеры.

Б. 2D-вариант

Это немного проще. Не визуализируйте стрелку в 3D. Просто отслеживайте положение головы и хвоста стрелки в 3D. При изменении положения камеры спроецируйте эти 3D-позиции в 2D-координаты холста. Затем вы можете нарисовать 2D-форму между этими 2D-позициями головы и хвоста. Обратите внимание, что для рисования 2D-фигуры потребуется создать прозрачный 2D-холст поверх вашего текущего холста WebGL.

Недостатком 2D-варианта является то, что стрелка будет накладываться поверх 3D-сцены, поэтому иногда она будет перекрывать синие кубы.

person Matey    schedule 08.11.2017
comment
спасибо за отличное объяснение, мне понадобится некоторое время, чтобы проверить, как только я подтвержу, я отмечу как правильный ответ. - person user2445278; 10.11.2017
comment
Как бы то ни было, мне удалось сделать это немного проще для того, что мне было нужно, однако я считаю, что ваша теория верна, и она поставила меня на правильный путь, большое спасибо. - person user2445278; 06.12.2017