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 ();