glMatrixMode(GL_MODELVIEW):
// make the modelview matrix current
// делаем текущей матрицу моделирования-вида
glLoadldentityO:
// start with a unit matrix
// начинаем с единичной матрицы
gluLookAtCeye.x. eye.у. eye.z. look.x. look.у. look.z. up.x. up.y. up.z): Как и прежде, в результате выполнения этого кода камера передвинется так, что ее глаз расположится в точке eye и будет направлен в интересующую нас точку look. Направление «вверх» обычно задается вектором up, который чаще всего равен (0,1,0). Эти параметры и весь процесс установки камеры почти целиком взяты из главы 5. В этой главе мы копнем глубже, чтобы лучше увидеть процесс установки камеры и лучше управлять им. Мы также разработаем инструменты для осуществления относительных изменений в направлении камеры, таких как легкий поворот влево, наклон вверх или скольжение вперед.
Камера общего вида с произвольной ориентацией и позицией Положение и ориентация камеры на сцене могут быть любыми. Представим себе преобразование, которое берет камеру на рис. 7.3, перемещает ее куда-нибудь в пространстве, а затем поворачивает, чтобы нацелить в желаемом направлении. Необходимо найти способ точного описания такого преобразования, а также определить вид результирующей матрицы моделирования-вида.
Полезно будет прикрепить явную систему координат прямо к камере, как предложено на рис. 7.3. У этой системы координат имеется начало, расположенное в точке глаза, и три оси, обозначаемые буквами и, v, п, что определяет их ориентацию. Оси указывают в направлениях, задаваемых векторами u, v, п, как показано на рисунке. Поскольку по умолчанию камера смотрит в сторону отрицательных значений z, то считается, что камера смотрит и в сторону отрицательных значений оси п, то есть в направлении -п. Направление и показывает «вправо» от камеры, а направление v - «вверх». Давайте думать об осях и, v, п как о двойниках осей x,y,zc рис. 7.2, которые перемещаются и поворачиваются при установке камеры в нужную позицию.