Как скрыть или показать 3D-объект в зависимости от угла обзора объекта? - PullRequest
0 голосов
/ 23 апреля 2020

Я потратил несколько дней, просматривая веб-страницы, в том числе Stackoverflow, пытаясь найти решение самостоятельно, но я пришел к ряду выводов:

  1. Моя голова слишком плоская, чтобы понять Quaternian и Эйлеровы углы. Хотя я многому научился во время моего исследования этого, есть гораздо больше, чего я просто не знаю или не понимаю
  2. Мышление в 3D гораздо сложнее, чем я ожидал, особенно когда вы попробуйте перевести из 2D в 3D и наоборот

У меня есть ода, которая позволяет мне рассчитать все углы внутри треугольника, учитывая три набора координат x, y для каждого из треугольников. углы. Это, очевидно, полезно, когда вам нужно вычислить углы между двумя векторами на 2D-плоскости. У меня также есть код, который позволяет мне вычислять угол между любыми двумя позициями в пространстве SceneView. Хотя оба эти фрагмента кода работают, как и ожидалось, я не могу понять, как использовать его для решения моей конкретной проблемы. Надеюсь, кто-то на этом форуме, намного ярче, чем я, может. :)

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

У меня есть четыре 3D-объекта, которые загружены в SceneView. Все четыре объекта прикреплены к одному и тому же anchorNode. 4 объекта отображаются под прямым углом друг к другу. То, что я хотел бы сделать, это скрыть два объекта, когда группа просматривается из двух указанных c угловых диапазонов при отображении двух других объектов. В тот момент, когда камера выходит за пределы этих двух диапазонов, скрытые объекты должны отображаться, а видимый объект должен быть скрыт. (Обратите внимание, что я знаю, как изменить видимость объекта.

Что я пробовал:

  1. Расчет угла между камерой и якорным узлом с использованием Worldposition камеры и якоря. Это достаточно просто, но, очевидно, углы будут постоянно меняться, в зависимости от сценария на данный момент из-за ориентации камеры в виртуальном мире. Например, если смотреть на объект прямо спереди, как на изображении 1 ниже, значение угла будет отличаться почти каждый раз при создании объекта. Я проверил это, ЛОТ.

  2. Добавление 2-го узла привязки непосредственно перед объектом в том же Worldpostion только слегка изменив ось Z. Я надеялся использовать координаты x & y (используя положение мира) для каждого (узел привязки исходного объекта, узел привязки привязки и камеру, имитируя три точки на плоскости 2D). Так как я могу вычислить углы треугольника, то становится простым упражнением для вычисления взгляд камеры на объекты. По крайней мере, это просто в теории, потому что на практике это не работает.

Вопрос : Как рассчитать угол наклона камеры к 4 объектам в такой способ, которым я могу последовательно скрывать правильные объекты, когда камера находится в определенных c угловых зонах?

Показывает 4 объекта непосредственно спереди

Те же 4 объекта с углового обзора с левой стороны

Те же 4 объекта с углового обзора с правой стороны

Диаграмма, показывающая 4 объекты сверху

Диаграмма, показывающая два объекта, спрятанных, когда камера находится где-нибудь в зоне красного угла

Диаграмма, показывающая камеру сейчас переместился во 2-ю зонированную область (красный) и соответствующий объект виден

...