Показать сообщение отдельно
Старый 08.04.2020, 16:05   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Как вычислить 2D координату курсора в 3D мире?

Сообщение от leshiyru70 Посмотреть сообщение
К сожалению будь всё так элементарно и не спрашивал бы. CameraPick не совсем что нужно. В вашем варианте прийдёться создавать объект, а в дальнейшем передвигать его в нужную 3D точку по отношению к курсору. Вполне реалистично, но как-то заморочно. Математическими вычислениями было-бы как-то солидней. Перелопатил уже уйму материала. Пока совсем не въехал. Математик ещё тот...
Надо взять координаты курсора в пространстве экрана (где центр экрана — это XY 0,0 правый верхний угол экрана — 1,1, левый нижний угол экрана — -1,-1, у а Z — это то расстояние от камеры, которое ты выбрал заранее сам).

То есть получится вектор XYZ в пространстве экрана.

Потом этот вектор надо умножить на инверсную матрицу камеры, и получится этот же вектор но уже в пространстве камеры.

Затем его умножить на инверсную матрицу трансформации камеры. И получатся координаты в пространстве мира, которые мы и хотели.

Это была теория. А вот практика уже грустнее.

Применительно к блицу, у него нет встроенных инструментов для работы с линейной алгеброй. Элементы матрицы трансформации можно достать с помощью GetMatElement.

Достать матрицу проекции камеры вроде нельзя. Но можно её самостоятельно сделать, зная её параметры (угол обзора и т.д.).

Так как у Блица нет встроенных инструментов для работы с линейной алгеброй, то инвертирование матриц и умножение вектора на них тебе придётся писать самому, что в целом не сложно, достаточно только вооружиться учебником по математике 1-го курса института.

Другой вопрос: в связи с особенностями Блица такой способ всё равно будет медленнее, чем если поставить полигон перед камерой и сделать на него CameraPick. Поэтому если стоит практическая задача, то лучше делать через CameraPick и не париться.

На других движках, наверное, операциями с математикой было бы и лучше, но не в случае Блица.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
Arton (10.04.2020), leshiyru70 (08.04.2020), St_AnGer (09.04.2020)