Автор | Сообщение |
gadmaker бывалый Группа: Участники Сообщений: 39 |
Добавлено: 08-10-2016 07:55 |
Здравствуйте! Помню что был пример (3D Mouse) на старых версиях движка. Но он не совсем точно работал. Есть ли возможность сейчас реализовать точный перевод 2D координат в 3D координаты. | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 08-10-2016 11:43 |
Да, я довел тот метод до ума, использую в своем движке. Могу сделать новый пример. | |
gadmaker бывалый Группа: Участники Сообщений: 39 |
Добавлено: 08-10-2016 13:39 |
Мне бы очень хотелось взглянуть на пример. Т.к. я не смог разобраться как это реализовать. | |
Gecko 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'а. |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 08-10-2016 15:22 |
Вот пример: Ссылка. |
|
gadmaker бывалый Группа: Участники Сообщений: 39 |
Добавлено: 08-10-2016 15:30 |
Спасибо! Работает прекрасно. Пример как раз тот который мне был нужен.Спасибо за оперативный ответ. |
Offtop.ru © 2003 |