Проекции. Введение в OpenGL
Проекции
В OpenGL существуют ортографическая (параллельная) и перспективная проекция. Первый тип проекции может быть задан командами
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)
void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
Первая команда создает матрицу проекции в усеченный объем видимости (параллелограмм видимости) в левосторонней системе координат. Параметры команды задают точки (left, bottom, -near) и (right, top, -near), которые отвечают левому нижнему и правому верхнему углам окна вывода. Параметры near и far задают расстояние до ближней и дальней плоскостей отсечения по дальности от точки (0,0,0) и могут быть отрицательными.
Во второй команде, в отличие от первой, значения near и far устанавливаются равными -1 и 1 соответственно.
Перспективная проекция определяется командой
void gluPerspective
которая задает усеченный конус видимости в левосторонней системе координат. Параметр angley определяет угол видимости в градусах по оси у и должен находиться в диапазоне от 0 до 180. Угол видимости вдоль оси x задается параметром aspect, который обычно задается как отношение сторон области вывода. Параметры zfar и znear задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительными. Чем больше отношение zfar/znear, тем хуже в буфере глубины будут различаться расположенные рядом поверхности, так как по умолчанию в него будет записываться ‘сжатая’ глубина в диапазоне от 0 до 1 (см. следующий пункт).
Преобразования координат и проекции
Преобразования координат и проекции В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в
Типовые проекции
Типовые проекции Использование типовых проекций значительно упрощает просмотр трехмерных объектов. Направление проецирования можно выбрать с помощью команд группы меню Views (Виды) на вкладке View (Отображение) ленты. Программа предлагает выбрать шесть типовых проекций и
2. Операция проекции.
2. Операция проекции. Операция проекции на языке структурированных запросов реализуется даже проще, чем операция выборки. Напомним, что при применении операции проекции выбираются не строки (как при применении операции выборки), а столбцы. Поэтому достаточно перечислить
Типовые проекции
Типовые проекции Использование типовых проекций значительно упрощает просмотр трехмерных объектов. Направление проецирования можно выбрать с помощью команд в меню View ? 3D Views (Вид ? Трехмерные виды). Программа предлагает выбрать шесть типовых проекций и четыре
4.
2. Создание трехмерной модели и построение горизонтальной проекции детали4.2. Создание трехмерной модели и построение горизонтальной проекции детали Правила изображения предметов устанавливает ГОСТ 2.305-68. Изображения предметов должны выполняться по методу прямоугольного проецирования.При этом предмет предполагается расположенным между
НОУ ИНТУИТ | Лекция | Координатные преобразования в OpenGL
< Лекция 14 || Лекция 6: 123456
Аннотация: В лекции рассматриваются видовые и перспективные преобразования, выполняемые библиотекой OpenGL при создании изображений.
Ключевые слова: object pascal, единица, система координат, координаты, матрица, матрица проекций, значение, команда, проекция, высота, стек, Радиус-вектор
Цель лекции: Изучить команды видовых и перспективных преобразований библиотеки OpenGL и их реализацию в Object Pascal и в C# с использованием библиотеки OpenTK.
Примеры на C# (WinForms) и Object Pascal (Delphi)
Пример № 5.1 Пример демонстрирует координатные преобразования.
Пример № 5.2 Пример демонстрирует формирование изображения цилиндра без освещения с использованием четырехугольников с общими гранями.
Системы координат OpenGL
Задание координат примитивов в OpenGL выполняется в мировой (правосторонней) системе координат, в которой ось OZ направлена на наблюдателя ( рис. 5.1).
Рис. 5.1. Правосторонняя система координат (мировая) | Рис. 5.2. Левосторонняя система координат (видовая) |
---|
Для построения проекции используется левосторонняя система координат (видовая), в которой ось OZ направлена от наблюдателя ( рис. 5.2). Преобразование одной системы координат в другую библиотека выполняет с помощью матрицы проекции.
Однородные координаты
Для задания координат объектов в OpenGL используются однородные координаты. Это позволяет представлять различные преобразования в виде квадратных матриц размером 4*4, а сложные преобразования представлять в виде произведения матриц, реализующих более простые преобразования.
В OpenGL для представления координат вершин используется вектор-столбец. Все матрицы библиотеки, используемые в библиотеке OpenGL, являются вертикальными:
Схема координатных преобразований
Для построения проекции трехмерного изображения библиотека выполняет ряд преобразований, последовательность которых показана на рис. 5.3.
Рис. 5.3. Последовательность координатных преобразований OpenGL
Для выполнения координатных преобразований в библиотеке используется три матрицы: видовая матрица, матрица проекций и матрица текстур.
Значения матриц хранятся внутри библиотеки. OpenGL предоставляет набор команд для операций над ними. Ниже более подробно описан каждый из этапов координатных преобразований.
Видовые преобразования
Входными данными для этого этапа являются координаты примитивов, задаваемые с помощью команды Vertex и её аналогов (например, команды Rect). Координаты вершин примитивов умножаются на текущую видовую матрицу. Результатом умножения являются видовые координаты вершин:
Обычно видовая матрица используется для таких преобразований как перенос, масштабирование и поворот. Для выполнения этих операций библиотека реализует команды Translate, Scale, Rotate. Каждая из этих команд формирует матрицу, осуществляющую соответствующее преобразование, и умножает её на текущую матрицу. Если – текущая видовая матрица, – матрица преобразования, то результирующая матрица , которая заменит текущую матрицу, будет получена в результате операции:
В результате новые преобразования как бы добавляются к тем, которые выполнялись с помощью текущей матрицы. Сложные координатные преобразования обычно представляют в виде комбинации более простых преобразований. При необходимости видовая матрица может быть полностью сформирована программно. После инициализации библиотеки видовая матрица является единичной.
Перспективные преобразования
На этом этапе координатных преобразований видовые координаты вершин (полученные на предыдущем этапе вычислений) умножаются на матрицу проекций .
В библиотеке реализованы две команды для формирования наиболее часто используемых проекций: команда Ortho — для формирования матрицы параллельной проекции и команда Frustum – для получения матрицы центральной перспективной проекции.
При выполнении этих команд определяется область видимости трехмерной сцены. Матрица проекции, кроме выполнения проекционных преобразований, также выполняет масштабирование координат видимой области к интервалу [-1,1] для каждой из осей координат. Преобразованные таким образом координаты вершин называются усечёнными координатами.
Деление перспективы
На третьем этапе выполняется преобразование нормализованных координат вершин к декартовым координатам, путем деления каждой из первых трех координат на четвёртую:
intuit.ru/2010/edi»>В терминах OpenGL это преобразование носит название «деление перспективы». Результатом выполнения этого преобразования является получение декартовых координат вершин.Дальше >>
< Лекция 14 || Лекция 6: 123456
Однородные координаты
←Назад
Проблема: Две параллельные прямые могут пересекаться.
Железная дорога становится уже и встречается на горизонте.
В евклидовом пространстве (геометрия) две параллельные линии на одной плоскости не могут пересекаться или вечно встречаться друг с другом. Это здравый смысл, с которым знаком каждый.
Однако в проективном пространстве это уже не так, например, поезд железная дорога на боковой картинке сужается по мере удаления от глаз. Наконец, две параллельные рельсы встречаются на горизонте, который является бесконечно удаленной точкой.
Евклидово пространство (или декартово пространство) так хорошо описывает нашу двумерную/трехмерную геометрию, но его недостаточно для работы с проективным пространством (на самом деле евклидова геометрия является подмножеством проективной геометрии). Декартовы координаты 2D-точки могут быть выражены как ( x, y ).
Что, если эта точка уйдет далеко в бесконечность? Точка в бесконечности была бы (∞, ∞), и она становится бессмысленной в евклидовом пространстве. Параллельные прямые должны встречаться на бесконечности в проективном пространстве, но не в евклидовом пространстве. Математики нашли способ решить эту проблему.
Решение: Однородные координаты
Однородные координаты, введенные Августом Фердинандом Мёбиусом, делают возможными графические и геометрические вычисления в проективном пространстве. Однородные координаты — это способ представления N-мерных координат с помощью N+1 чисел.
Чтобы сделать двумерные однородные координаты, мы просто добавляем дополнительную переменную w в существующие координаты. Следовательно, точка в декартовых координатах (X, Y) становится (x, y, w) в однородных координатах. А X и Y в декартовом выражении повторно выражаются с помощью x, y и w в гомогенном as;
Х = х/ш
Г = г/б
Например, точка в декартовом (1, 2) становится (1, 2, 1) в гомогенном. Если точка (1, 2) движется к бесконечности, она становится (∞, ∞) в декартовых координатах. И становится (1, 2, 0) в однородных координатах, потому что (1/0, 2/0) ≈ (∞,∞). Обратите внимание, что мы можем выразить точку в бесконечности, не используя «∞».
Почему он называется «однородным»?
Как упоминалось ранее, чтобы преобразовать однородные координаты (x, y, w) в декартовы координаты, мы просто делим x и y на w;
Преобразовывая гомогенную систему в декартову, мы можем обнаружить важный факт. Давайте посмотрим на следующий пример;
Как видите, точки (1, 2, 3), (2, 4, 6) и (4, 8, 12) соответствуют одной и той же евклидовой точке (1/3, 2/3). И любое скалярное произведение (1а, 2а, 3а) — это та же точка, что и (1/3, 2/3) в евклидовом пространстве. Следовательно, эти точки являются «однородными» , потому что они представляют одну и ту же точку в евклидовом пространстве (или декартовом пространстве). Другими словами, однородные координаты не зависят от масштаба.
Доказательство: две параллельные прямые могут пересекаться.
Рассмотрим следующую линейную систему в евклидовом пространстве;
И мы знаем, что для приведенных выше уравнений нет решения, потому что C ≠ D.
Если C = D, то две линии идентичны (перекрываются).
Перепишем уравнения проективного пространства, заменив x и y на x/w, y/w соответственно.
Теперь у нас есть решение (x, y, 0), поскольку (C — D)w = 0, ∴ w = 0. Следовательно, две параллельные прямые пересекаются в точке (x, y, 0), которая является точкой на бесконечности.
Однородные координаты — очень полезная и фундаментальная концепция в компьютерной графике, например, при проецировании 3D-сцены на 2D-плоскость.
←Назад
opengl — Мое понимание проекционной матрицы, перспективного деления, NDC и преобразования видового экрана
Я был совершенно сбит с толку тем, как работает проекционная матрица, поэтому я исследовал и обнаружил еще несколько вещей, но через несколько дней исследований , я просто хотел подтвердить правильность моего понимания. Я мог бы использовать несколько неправильных терминов, но мой мозг был истощен после написания этого. Несколько тем, которые я только что вкратце изучил, например, экранные координаты и преобразование окон, поэтому я мало писал об этом, и мои знания могут быть неверными. Все, что я здесь написал, верно или в основном правильно? Поправьте меня в чем-нибудь, если я ошибаюсь.
Что делает проекционная матрица?
Итак, матрица перспективной проекции определяет усеченную пирамиду. Все, что находится за пределами этого диапазона усеченной/усеченной пирамиды, будет обрезано. Я расскажу об этом позже. Матрица перспективной проекции также добавляет перспективу. Чтобы заставить вершины следовать правилам перспективы, матрица перспективной проекции манипулирует компонентом w вершины (однородным компонентом) в зависимости от того, насколько далеко вершина находится от зрителя (чем дальше вершина, тем выше будет увеличиваться координата w).
Почему и как компонент w делает мир более восприимчивым?
Компонент w делает мир более восприимчивым, потому что при разделении перспективы (деление перспективы происходит на этапе постобработки вершин), когда x, y и z делятся на компонент w, координата вершины будет уменьшена в зависимости от от того, насколько велик компонент w. Таким образом, компонент w масштабирует объект тем меньше, чем дальше находится объект.
Пример:
Позиция вершины (1, 1, 2, 2).
Здесь вершина находится на расстоянии 2 от наблюдателя. При перспективном делении x, y и z будут делиться на 2, потому что 2 — это компонент w.
(1/2, 1/2, 2/2) = (0,5, 0,5, 1).
Как показано здесь, координата вершины уменьшена вдвое.
Как матрица проекции решает, что будет обрезано?
Ближняя и дальняя плоскости — это границы того, что может видеть зритель (все, что находится за пределами дальней плоскости и до ближней плоскости, будет обрезано). Любая координата также должна будет пройти проверку на отсечение, чтобы увидеть, нужно ли ее обрезать. Проверка отсечения проверяет, находится ли координата вершины в пределах диапазона усеченной пирамиды от -w до w. Если он находится за пределами этого диапазона, он будет обрезан.
Допустим, у меня есть вершина с позицией (2, 130, 90, 90).
значение x равно 2
значение y равно 130
значение z равно 90
значение w равно 90
Эта вершина должна находиться в диапазоне от -90 до 90. значение y выходит за пределы диапазона, поэтому вершина будет обрезана.
Итак, после завершения вершинного шейдера следующим шагом является постобработка вершин. При постобработке вершин происходит отсечение, а также происходит разделение перспективы, когда пространство отсечения преобразуется в NDC (нормализованные координаты устройства). Кроме того, преобразование области просмотра происходит, когда NDC преобразуется в пространство окна.
Что делает перспективное деление?
Разделение перспективы по существу делит компоненты x, y и z вершины с компонентом w. Это на самом деле делает две вещи: преобразует пространство отсечения в нормализованные координаты устройства, а также добавляет перспективу путем масштабирования вершин.
Что такое нормализованные координаты устройства? Нормализованные координаты устройства — это система координат, в которой все координаты сведены в поле NDC, где каждая ось находится в диапазоне от -1 до +1.