Существует еще одна удобная функция для задания перспективного проектирования void gluLookAt (GLdouble eyeX.GLdouble eyeY.GLdouble eyeZ, Gldouble centerX,GLdouble centerY,GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ ); Вектор [eyeX, eyeY, eyeZ) задает положение наблюдателя, вектор (centerX, centerY, centerZ) -направление на центр сцены, а вектор (арХ, upY, upZ) - направление вверх, В случае параллельного проектирования полем зрения является прямоугольный параллелепипед. Для задания параллельного проектирования служит процедура

void glOrtho ( GLdouble left, GLdouble right, GLdouble bottom,

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

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

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

void gIViewport ( GLint х, GLint у, GLsizei width, GLsizei height ); Здесь (x,y) задает нижний левый угол прямоугольной области в окне, a width и

height являются ее шириной и высотой.

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

Для помещения текущей матрицы в стек служит процедура

void gIPushMatrix ();

для снятия матрицы со стека - процедура void gIPopMatrix (); Ниже приводится пример программы, использующей работу со стеком матриц, для построения изображения машины с колесами, причем каждое колесо крепится пятью болтами.

void drawWheelAndBolts () {
drawWheel (); for ( int i = 0; i < 5; i++ )
{
gIPushMatrix ();
gIRotatef (72.04, 0.0, 0.0, 1.0 ); gITranslatef ( 3.0, 0.0, 0.0 ); drawBolt (); gIPopMatrix ();
}
}
void drawBodyAndWheelAndBolts () {
drawCarBody (); gIPushMatrix ();

⇐ Предыдущая| |Следующая ⇒