Перевод мыши X & Y в координаты 3D модели - PullRequest
1 голос
/ 05 февраля 2010

Я создаю простой трехмерный интерфейс перетаскивания в процессе обработки и хочу определить, когда мышь наведет курсор на объект. Я хотел бы представить, что мне нужно выполнить некоторые матричные преобразования в координаты трехмерной модели, чтобы поместить их в пространство экрана и так далее ...

У меня есть простая версия этой работы, проблема в том, что, когда камера перемещается вокруг сцены, координаты меня теряют.

Так как мне перевести координаты плитки в пространство экрана (поскольку screenX и screenY не работают должным образом)?

UPDATE: В конце концов я нашел два примера с сайта Processing, как это сделать. Благодаря villintehaspam .

http://processing.org/hacks/hacks:picking

1 Ответ

3 голосов
/ 05 февраля 2010

Эта проблема называется сбором. Ищите выбор мыши, и вы получите много-много хитов.

Основная теория такова:

  1. Получить координаты x, y по щелчку мыши.
  2. Преобразуйте их в координаты x, y, z в координатах глаза (т. Е. -1 <= x <= 1, -1 <= y <= 1, z = расстояние ближней / дальней отсечки, если у вас нормальная проекция) . </li>
  3. Преобразуйте эти координаты с помощью обратной матрицы проекции, чтобы получить мировые координаты.
  4. Теперь у вас есть луч из положения камеры с направлением в направлении мировых координат, которые вы только что получили.
  5. Выполните тест пересечения луча с объектами, которые вы хотите рассмотреть. Выберите объект, который пересекает луч, ближайший к источнику луча (положение камеры).
...