Перспективная привязка плоскости к краям экрана в 3D-пространствеDelphi , Графика и Игры , OpenGL
При работе с 3D-графикой часто возникает необходимость привязать движение объекта к пикселям экрана, чтобы объект точно совпадал с границами экрана. В данной статье мы рассмотрим, как добиться этого в перспективном режиме просмотра без использования ортографической проекции. Постановка задачи Нам необходимо двигать плоскость в 3D-пространстве так, чтобы ее движение совпадало с пикселями экрана, и мы могли бы привязать плоскость к границам экрана. Мы уже добились совпадения размера плоскости с размерами экрана в пикселях, но при движении плоскости координаты не совпадают с пикселями экрана. Решение Для решения этой задачи нам нужно извлечь матрицы трансформации, используемые в вершинном шейдере, и применить их к точке или точкам, представляющим плоскость. Это даст нам набор точек в диапазоне от -1 до 1 (после деления на w), которые мы затем нужно будет отобразить в viewport. Если мы хотим ограничить плоскость видимым экраном, нам не нужно отображать точки в viewport. Но если нам нужно точно привязать плоскость к границам экрана, мы должны выполнить отображение. Для этого можно использовать следующую формулу:
Где После получения отображенных кооринат мы можем использовать их для привязки плоскости к границам экрана, например, путем установки координат плоскости равными координатам верхнего левого угла экрана. Пример кода на Object Pascal (Delphi) Ниже приведен пример кода, демонстрирующий как привязать плоскость к границам экрана в перспективном режиме просмотра:
Подтвержденный ответ Для привязки плоскости к границам экрана в перспективном режиме просмотра нужно извлечь матрицы трансформации, используемые в вершинном шейдере, применить их к точке или точкам, представляющим плоскость, и отобразить полученные координаты в viewport. Затем координаты можно использовать для привязки плоскости к границам экрана. Альтернативный ответ Если нам не нужно точно привязывать плоскость к границам экрана, а просто ограничить ее видимым экраном, мы можем не отображать координаты точки в viewport. В этом случае достаточно просто двигать плоскость в 3D-пространстве, учитывая текущее положение камеры и проекцию плоскости на экран. 'Привязка плоскости к краям экрана в 3D-пространстве в перспективном режиме просмотра без использования ортографической проекции'. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |