Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конвертирование 2D координат курсора в 3D

20K
28 августа 2006 года
PstM
3 / / 28.08.2006
Доброе время суток,

кто подскажет как спроецировать экранные координаты курсора в 3D мир?

если пользоваться функциями unproject и intersection то выдаётся информация о треугольнике в который попал курсор и Byracentric координаты.

как их перевести в мировые?


Или если мне например нужно узнать X и Y мировые при определённом известном мировом Z?

Заранее спасибо за ответ.
551
28 августа 2006 года
Pavia
357 / / 22.04.2004
свой вектор X,Y,Z умножить на мировую матрицу.
20K
28 августа 2006 года
PstM
3 / / 28.08.2006
Если можно попдробней,
который из векторов? который NEAR?, и после unproject?
534
31 августа 2006 года
HarryAxe
448 / / 19.01.2006
Если нужно координаты относительно камеры, то вектор (x, y, 0) надо помножить на view-матрицу - получим новое (3D) направление соответствующих осей
20K
31 августа 2006 года
PstM
3 / / 28.08.2006
попробовал, не соответствуют координаты реальности, может примеры есть какие?
13K
01 сентября 2006 года
Osiris
9 / / 22.12.2005
А у ты чем пользуешься? Если DirectX то есть в стандартом SDK пример соответствующий - а вообще много раз спрашивали и отвечали на данную тему на gamedev.ru - поищи там
534
01 сентября 2006 года
HarryAxe
448 / / 19.01.2006
[QUOTE=PstM]попробовал, не соответствуют координаты реальности, может примеры есть какие?[/QUOTE]Заполнение view-матрицы - всего лишь реализация look-at контроллера, как его принято обозначать в трёхмерной графике, то есть положение камеры - это смещение координат, а направление цели и up-вектор задают вращение по осям x, y и z, если считать, что ось z направлена из камеры (вглубь экрана). Такая матрица ничем не отличается от обычной матрицы преобразований (просто здесь не нужно заморачиваться с порядком следования осей при вращении). Пример: возьмём произвольную точку (или, скажем, смещение) на экране, к примеру v0 = (5, 10, 0). Далее, пусть камера находится в начале координат (0, 0, 0), а её цель (camera target) - в точке (0, 0, 1), то есть направление осей в пространстве ничем не отличается от принятого по умолчанию (up-вектор принимаем за (0, 1, 0), то есть камера стоит вертикально), а, значит, экранные координаты должны совпадать с мировыми. Формируем view-матрицу и умножаем на неё вектор v0 - получаем те же (5, 10, 0). Поворачиваем камеру на 90 градусов вокруг z, то есть up-вектор будет теперь u = (-1, 0, 0) - получим v = (10, -5, 0) - всё правильно? Вернём камеру в "вертикальное" положение и крутанём её на этот раз вокруг оси y: зададим положение цели (-2, 0, 0), расстояние до цели на преобразование координат не влияет. Умножаем, получаем v = (0, 10, -5). Это то, что тебе было нужно? Для полноты картины вернём "всё как было" и сместим камеру в точку (0, 0, 0.5). В результате преобразования получим v = (5, 10, -0.5) - точка оказалась за камерой, и её новая z-координата стала отрицательной - смещение координат идёт в обратную сторону. Для камеры это правильно и на самом деле должно иметь место. Но, если планируется перемещать локальную плоскую систему координат вместе с камерой, а не против её движения, то придётся прибавлять к преобразованному вектору v вектор 2*с, где вектор с есть положение камеры.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог