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