Выбор ближайшей точки в режиме перспективного просмотра

Я пытаюсь улучшить свой алгоритм для выбора точек в режиме перспективного просмотра (OpenGL /Qt /C ++). Текущая реализация работает следующим образом.

  1. Пользователь нажимает на определенную позицию (x,y) (в пространстве окна)
  2. Перемещение конвейера из Window space обратно в World space (то есть Window → NDC → Clip → Eye → World), это определяет точку a на плоскости near и точке b на плоскости far
  3. Расстояние от линии между a и b и вершины (доступные в Мировом пространстве) определяются (см., например, в этой статье Wikipedia)
  4. Выбрана точка с минимальным расстоянием до линии.

Теперь это отлично работает при использовании режима ортогонального просмотра. Однако, когда вы визуализируете что-то в режиме перспективного просмотра, есть некоторые случаи, когда результат может быть немного выключен.

В качестве примера рассмотрим каркас куба. На приведенном ниже рисунке точка (x,y) - это точка, где встречаются все белые линии. Эти строки ортогональны линии от a до b, который не отображается в этой ориентации - на втором рисунке показано повернутое изображение.

Точка, которая в конечном итоге выбирается, выделяется зеленым цветом. Однако, поскольку синяя точка кажется ближе к (x,y) в перспективном режиме, пользователь, вероятно, ожидает эту точку для выбора. Как бы то ни было, расчетные расстояния необходимо масштабировать, чтобы учитывать этот эффект. Как это обычно делается?

 введите описание изображения здесь>> </a> </p>

<p> <a href= введите описание изображения здесь>> </a> </p></body></html>

4 голоса | спросил Ailurus 10 Jpm1000000pmSun, 10 Jan 2016 18:44:27 +030016 2016, 18:44:27

1 ответ


1

Шаг, который вам не хватает, - это разделение перспективы. Чтобы вычислить значение, которое нужно разделить, вы должны все равно выполнить математическую матрицу перспективы, чтобы вы могли также преобразовать точку из мирового пространства в пространство экрана и решить проблему в 2D-координатах экрана.

Если вам интересно узнать о математике, вы можете прочитать, как работает матрица перспективы здесь

ответил John K 10 Jpm1000000pmSun, 10 Jan 2016 19:32:45 +030016 2016, 19:32:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132