Нетрудно преобразовать «обычное» представление точки или вектора (как упорядоченную тройку в случае трехмерных объектов и упорядоченную пару - в случае двумерных) в однородную форму. Для перехода от обычных координат к однородным необходимо: Если объект является точкой, то добавить 1. Если объект - вектор, то добавить 0.

Для перехода от однородных координат к обычным необходимо: Если объект - вектор, то его последняя координата равна 0. Удалить этот 0. Если объект - точка, то ее последняя координата равна 1. Удалить эту 1.

1 На самом деле мы прошли лишь часть пути при рассмотрении этого вопроса. Как мы увидим в главе 7, где мы будем изучать проекции, однородные координаты предоставят там возможность дополнительной операции, которая сделает их действительно однородными. Однако до изучения проекций нам нет необходимости вводить эту операцию.

2 В случае двух измерении точки являются тропками вида (ргр2, 1), а векторы - тройками вида (»,, и2,0).

Глава 4. Векторные инструменты для графики

OpenGL использует четырехмерные однородные координаты для всех вершин своих объектов. Если вы посылаете в OpenGL тройку в виде (х, у, z), она немедленно преобразуется к виду (х, у, z, 1), Если же вы посылаете в него двумерную точку (х, у), то он первым делом добавит 0 в качестве z-компонента, а затем 1, в результате чего получится (х, у, О, 1). Все вычисления внутри OpenGL производятся в четырехмерных однородных координатах.

Линейные комбинации векторов Многие действия можно успешно производить в однородных координатах путем покоординатного оперирования с векторами. Все определения и операции сохраняются.

О Разность двух точек (х, у,г,1)и (и, v,w,l) равна (х - и, у -v,z-w, 0), то есть, как и ожидалось, является вектором.

О Сумма точки (х, y,z,l)n вектора (d, e,f, 0) равна (х + d, у + е, z + /, 1), то есть другой точке.

О Два вектора можно складывать: (d, e,f, 0) + (m, n,r,0) = (d+m,e + n,f+ r, 0), в результате получается другой вектор.

О Имеет смысл масштабирование вектора: 3(d, e,f, 0) = (3d, Зе, 3/, 0).


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