void gluPerspective ( GLdouble fovy, GLdouble aspect,
GLdouble zNear, GLdouble zFar );

Эта процедура создает матрицу для задания симметричного поля зрения и умножает текущую матрицу на нее. При этом fovy - угол зрения камеры в плоскости Охг, он должен лежать в диапазоне [0, 180]. Параметр aspect есть отношение ширины области к ее высоте; zNear и zFar - расстояния вдоль отрицательного направления оси Oz, определяющие ближнюю и дальнюю плоскости отсечения.

Соответствующая матрица проектирования имеет следующий вид:

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

void glOrtho ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far ) ;

Основы библиотеки OpenGL

Матрица проектирования в этом случае умножается на матрицу

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

void glViewport ( GLint х, GLint у,

GLsizei width, GLsizei height );

Здесь (д:, у) задает нижний левый угол прямоугольной области в окне,

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

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

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

void glPushMatrix (); .

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

void glPopMatrix () ;

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

л.

void drawWhellAndBolts ()
{
drawWheel ();
for ( int i = 0; i < 5; i++ ) {
glPushMatrix ();
glRotatef ( 72.0*i, 0.0, 0.0, 1.0 ) ;
glTranslatef ( 3.0, 0.0, 0.0 ); drawBolt ();

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