Затем функция gl uLookAtO нормирует эти три вектора, устанавливая для них единичную длину, после чего строит следующую матрицу: их Uy uz dx

v v v d у - x у z у

«, "y пг dz 0 0 0 1

где точка d имеет компоненты: (dx, dy, dz) - (-eye • u, -eye • v, -eye • n).

а) Докажите, что векторы u, v и n взаимно перпендикулярны.

б) Докажите, что матрица V правильно преобразует мировые координаты в координаты камеры, проверив, что она отображает точку eye в начало координат (0,0,0,1)г, векторы и в i - (1,0,0,0), v в j - (0,1,0) и п в к - (0, 0,1).

в) Докажите для случая eye - (4,4,4), lookAt - (0,1,0), up - (0,1,0), что результирующая матрица имеет следующий вид:

Френсис Хилл

Рис. 5.54. Преобразование координат из мировых в координаты камеры 5.6.2. К вопросу об элементах матрицы в OpenGL

Выведите значения матрицы моделирования-вида, чтобы проверить некоторые утверждения, сделанные при ее создании. Для того чтобы увидеть, что записано в матрице моделирования-вида в OpenGL, определите массив GLfl oat mat[16] и примените функцию gl GetFI oat v ( GL_M0DELV i EW_MATRI X. mat), которая копирует в массив mat[] 16 значений матрицы моделирования-вида. Элемент матрицы M[i][j] копируется в элемент массива mat[4j+i] для i,j - 0,1,2,3.

5.6.3. Рисование элементарных форм, поддерживаемых OpenGL

В следующей главе мы увидим, как создавать свои собственные трехмерные объекты, однако уже сейчас нам требуется нарисовать несколько трехмерных объектов - чтобы поэкспериментировать с установкой и использованием камер. В инструментарии GLUT предусмотрено несколько таких готовых Глава 5. Преобразования объектов объектов, включая сферу, конус, тор, пять Платоновых тел (обсуждаемых в главе 6), а также небезызвестный чайник. Каждый такой объект доступен в виде каркасной модели и в виде объемной модели с гранями, которые могут быть закрашены. Ниже приводится список, показывающий, какие функции используются для рисования некоторых из этих объектов: О куб: glutWireCube(GLdouble size); каждая сторона имеет длину size;


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