Я потратил несколько дней, просматривая веб-страницы, в том числе Stackoverflow, пытаясь найти решение самостоятельно, но я пришел к ряду выводов:
- Моя голова слишком плоская, чтобы понять Quaternian и Эйлеровы углы. Хотя я многому научился во время моего исследования этого, есть гораздо больше, чего я просто не знаю или не понимаю
- Мышление в 3D гораздо сложнее, чем я ожидал, особенно когда вы попробуйте перевести из 2D в 3D и наоборот
У меня есть ода, которая позволяет мне рассчитать все углы внутри треугольника, учитывая три набора координат x, y для каждого из треугольников. углы. Это, очевидно, полезно, когда вам нужно вычислить углы между двумя векторами на 2D-плоскости. У меня также есть код, который позволяет мне вычислять угол между любыми двумя позициями в пространстве SceneView. Хотя оба эти фрагмента кода работают, как и ожидалось, я не могу понять, как использовать его для решения моей конкретной проблемы. Надеюсь, кто-то на этом форуме, намного ярче, чем я, может. :)
Ниже приведен набор изображений, которые помогут описать то, чего я пытаюсь достичь.
У меня есть четыре 3D-объекта, которые загружены в SceneView. Все четыре объекта прикреплены к одному и тому же anchorNode. 4 объекта отображаются под прямым углом друг к другу. То, что я хотел бы сделать, это скрыть два объекта, когда группа просматривается из двух указанных c угловых диапазонов при отображении двух других объектов. В тот момент, когда камера выходит за пределы этих двух диапазонов, скрытые объекты должны отображаться, а видимый объект должен быть скрыт. (Обратите внимание, что я знаю, как изменить видимость объекта.
Что я пробовал:
Расчет угла между камерой и якорным узлом с использованием Worldposition камеры и якоря. Это достаточно просто, но, очевидно, углы будут постоянно меняться, в зависимости от сценария на данный момент из-за ориентации камеры в виртуальном мире. Например, если смотреть на объект прямо спереди, как на изображении 1 ниже, значение угла будет отличаться почти каждый раз при создании объекта. Я проверил это, ЛОТ.
Добавление 2-го узла привязки непосредственно перед объектом в том же Worldpostion только слегка изменив ось Z. Я надеялся использовать координаты x & y (используя положение мира) для каждого (узел привязки исходного объекта, узел привязки привязки и камеру, имитируя три точки на плоскости 2D). Так как я могу вычислить углы треугольника, то становится простым упражнением для вычисления взгляд камеры на объекты. По крайней мере, это просто в теории, потому что на практике это не работает.
Вопрос : Как рассчитать угол наклона камеры к 4 объектам в такой способ, которым я могу последовательно скрывать правильные объекты, когда камера находится в определенных c угловых зонах?
Показывает 4 объекта непосредственно спереди
Те же 4 объекта с углового обзора с левой стороны
Те же 4 объекта с углового обзора с правой стороны
Диаграмма, показывающая 4 объекты сверху
Диаграмма, показывающая два объекта, спрятанных, когда камера находится где-нибудь в зоне красного угла
Диаграмма, показывающая камеру сейчас переместился во 2-ю зонированную область (красный) и соответствующий объект виден