Реализация проекций в OpenGL Перспективная проекция | MetodPro.ru

Реклама на сайте

Реализация проекций в OpenGL Перспективная проекция


Перспективная проекция определяется командой glFrustum. Результат выполнения данной команды аналогичен предыдущему  - происходит перемножение текущей матрицы с матрицей перспективной проекции, определяемой данной командой. Результирующая матрица становится текущей матрицей. Синтаксис команды следующий:

 

GlFrustum (left GLdouble, right GLdouble, bottom GLdouble, top GLdouble, near GLdouble, far GLdouble),

 

где

left, right  - определяют соответственно левую и правую плоскости отсечения;

top, bottom        - определяют соответственно верхнюю и нижнюю плоскости отсечения;  near, far - определяют расстояние до передней (ближней) и задней (дальней) плоскостей отсечения видимого объема. Эти величины могут быть только положительными.

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

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

Матрица перспективного проецирования  выглядит следующим образом:

 

 

 

В библиотеке GLU существует альтернативная команда для задания перспективной проекции:

 

gluPerspective( fovy GLdouble,  aspect GLdouble,  near GLdouble,  far GLdouble );

где

fovyопределяет угол зрения в плоскости yoz, его значение принадлежит диапазону [0.0..180.0];

aspectопределяет aspect ratio сечения видимого объема (отношение ширины к высоте). 

near, far - определяют расстояние до передней (ближней) и задней (дальней) плоскостей отсечения видимого объема. Они также должны быть только положительными.

Команда создает матрицу симметричного перспективного преобразования и перемножает ее с текущей матрицей.

При использовании данной команды необходимо следить за совпадением величин aspect ratio поля вывода и данной команды.

 

glViewport(0, 0, ClientWidth, ClientHeight);

gluPerspective(30.0, ClientWidth/ClientHeight, 2.0, 10.0);

 

Очевидно, что параметры двух команд, определяющих перспективное преобразование, легко преобразуются друг в друга, исходя из простых тригонометрических зависимостей.



Методические пособия

  • Системы автоматизированного проектирования
  • Социология молодёжи
  • Общая социология
  • Криптография
  • Проектирование трансляторов
  • Компьютерная графика
  • Моделирование систем
  • Информационная безопасность
  • Теория вычислительных процессов
  • Логические основы искусственного интелекта
  • Проектирование распределённых информационных систем