Перевод координат Мыши в 3D пространство


Автор Сообщение

бывалый
Группа: Участники
Сообщений: 39
Добавлено: 08-10-2016 07:55
Здравствуйте! Помню что был пример (3D Mouse) на старых версиях движка. Но он не совсем точно работал. Есть ли возможность сейчас реализовать точный перевод 2D координат в 3D координаты.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 08-10-2016 11:43
Да, я довел тот метод до ума, использую в своем движке. Могу сделать новый пример.

бывалый
Группа: Участники
Сообщений: 39
Добавлено: 08-10-2016 13:39
Мне бы очень хотелось взглянуть на пример. Т.к. я не смог разобраться как это реализовать.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 08-10-2016 14:31
Начал было портировать старый код, но вспомнил о новой функции ViewerScreenToVector, с ней все проще:

px = ObjectGetAbsolutePosition(camera, 0);
py = ObjectGetAbsolutePosition(camera, 1);
pz = ObjectGetAbsolutePosition(camera, 2);

mx = ViewerScreenToVector(view1, mouse_x, window_get_height() - mouse_y, 0);
my = ViewerScreenToVector(view1, mouse_x, window_get_height() - mouse_y, 1);
mz = ViewerScreenToVector(view1, mouse_x, window_get_height() - mouse_y, 2);

worldx = 0;
worldz = 0;
if (my != 0)
{
worldx = px - mx * py / my;
worldz = pz - mz * py / my;
}

ObjectSetAbsolutePosition(obj, worldx, 0, worldz);

Проверка (my != 0) вводится, чтобы не было деления на ноль.
Могу пример тоже выложить, но чуть позже.

Этот код - только для простейшего случая, т.е., для плоскости XZ. Если надо найти координаты в какой-то другой плоскости, то надо менять код вычисления worldx, worldz. В принципе, имея вектор из камеры (mx, my, mz) для нужной позиции на экране, можно найти координаты пересечения с любым объектом - при помощи raycasting'а.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 08-10-2016 15:22
Вот пример:

Ссылка.

бывалый
Группа: Участники
Сообщений: 39
Добавлено: 08-10-2016 15:30
Спасибо! Работает прекрасно. Пример как раз тот который мне был нужен.Спасибо за оперативный ответ.

 

Offtop.ru © 2003