Я пытаюсь изучить (современный) OpenGL, и я полностью запутался в различных преобразованиях...
Матрица просмотра меня смутила, поэтому мне нужно некоторое разъяснение.
Вот что я понял о (обычном) конвейере.
- Вершины задаются в мировом пространстве, которые масштабируются, перемещаются, поворачиваются и т. д. в требуемые положения с помощью матрицы моделирования.
- (Здесь я начинаю путаться) Мы можем (опционально) расположить виртуальную камеру в нужном месте с помощью функции «lookAt» (gluLookAt). Я следил за выводом матрицы здесь: http://www.youtube.com/watch?v=s9FhcvjM7Hk. Я понял до того момента, когда профессор вычисляет вектор "взгляда". Он говорит, что вектор взгляда = глаз - центр. Теперь вот где я начинаю теряться. Мой первый инстинкт заключается в том, что вектор должен быть в центре - глаз. Предположим, что вектор центра задан как (0,0,0), а вектор глаза равен (0,0,5). Чтобы посмотреть на объект, камера должна быть направлена в центр - глаз = (0,0,-5). Однако профессор заявляет, что мы хотим переместить центр — глаз в направлении -z (что это значит?). Следовательно, глазоцентр даст взгляду направление. Меня это смущает. Далее он добавляет, что в OpenGL есть камера в начале координат, смотрящая на (0,0,-1). Вот этого я совершенно не понимаю. Я понимаю, что преобразование просмотра - это не что иное, как применение обратного преобразования к объектам. Я немного поэкспериментировал и обнаружил, что когда я рисовал треугольник со значением z, равным 1 (и абсолютно без преобразований модели/проекции), он все еще рисовался на экране. Однако я бы не ожидал, что это так, поскольку камера находится в начале координат.
Теперь, подытоживая...
- Почему смотреть на = глаз - центр?
- Что такого в том, что камера находится в начале координат и смотрит на z=-1?
Любые объяснения/указатели?