Получение проекций

Видимым объемом при перспективном преобразовании в OpenGL является усеченная пирамида

Для задания перспективного преобразования в OpenGL служит процедура:

gIFrustrum(GLdouble teft, GLdoubte right, GLdouble bottom, GLdouble top, GLdouble near, GLdoubte far).

Параметры определяют плоскости, по которым проводится отсечение. Величины near и far должны быть неот­рицательными.

Иногда для задания перспективного преобразования удобнее воспользоваться следующей процедурой из биб­лиотеки утилит OpenGL:

gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar).

Эта процедура создает матрицу для задания симметричного поля зрения и умножает те­кущую матрицу на неё. Здесь fovy – угол зрения камеры в плоскости Oxz, лежащий в диапазоне [0, 180]. Параметр aspect – отношение ширины области к её высоте, zNear и zFar – расстояния вдоль отрицательного направления оси Oz, определяющие ближнюю и дальнюю плоскости отсечения.

Существует ещё одна удобная функция для задания перспективного проецирования:

gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,

GIdouble centerX, GLdouble centerY, GLdouble centerZ,

GLdouble upX, GLdouble upY, GLdouble up2).

Вектор (еуеХ, eyeY, eyeZ) задаёт положение наблюдателя, вектор (cenlerX, centerY, centerZ) – направление на центр сцены, а вектор (upX, upY, upZ) – направление вверх.

В случае параллельного проецирования видимым объемом является прямоугольный па­раллелепипед. Для зада­ния параллельного проецирования служит процедура:

glOrtho(GLdouble left, GLdouble right, GLdouble bottom,

GLdouble top, GLdouble near, GLdouble far).

Параметры left и right определяют координаты левой и правой вертикальных плоскостей отсечения, a bottom и top – нижней и верхней горизонтальных плоскостей.

Следующим шагом в задании проецирования (после выбора параллельного или перспективного преобразова­ния) является задание области в окне, в которую будет по­мещено получаемое изображение. Для этого служит процедура

gIViewport(GLint x, GLint у, GLsizei width, GLsizei height).

Здесь (х,у) задаёт нижний левый угол прямоугольной области в окне, a width и height являются её шириной и высотой.

OpenGL содержит стек матриц для каждого из трёх типов преобразований. При этом текущую матрицу можно поместить в стек или извлечь матрицу из стека и сделать её те­кущей.

Для помещения текущей матрицы в стек служит процедура gIPushMatrix(), для извлечения матрицы из стека – процедура glPopMatrix().


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: