Приведение пирамиды видимости к каноническому объему

Рассмотрим простейшую сцену из двух треугольников ABC и DEF, заданную в мировой системе координат XYZ (см. рис. 24.1). Представим, что наблюдатель перемещается по поверхности земли, может переводить взгляд в горизонтальной плоскости и смотрит на мир сквозь прямоугольное окно размером Wx H мм, которое помещено на расстоянии d от наблюдателя перпендикулярно линии взгляда.

Чтобы компьютерная система моделировала визуальную обстановку, реальное окно размером Wx H мм, через которое наблюдатель видит мир, должно отобразиться в окно на экране дисплея. Положение вершин треугольников в дисплейном окне должно соответствовать точкам пересечения с проекционной

Геометрические преобразования

плоскостью отрезков, соединяющих вершины пространственных треугольников с центром проецирования.

Из рисунка видно, что точка наблюдения находится на расстоянии d= 1800 мм от проекционной плоскости, линия визирования параллельна оси Z, а ось У системы координат наблюдателя совпадает с соответствующей осью мировой системы.

Но нужно конкретизировать условия задачи. Предположим, что наблюдатель находится в точке К на оси У мировой системы координат, W=800 мм, Я =600 мм. При добавлении объектов в сцену должны быть видимыми все точки на расстоянии до/= 10 м. Объекты, находящиеся от наблюдателя дальше 10 м, должны отсекаться. Вершины треугольников имеют следующие координаты: А (400, 1600, 3000); В (-300, 1700, 3000); С (-50, 2100, 3000); D (500, 2000, 4000); £(-300, 1900, 2500); £(-300, 2000, 2500).

Разработчик геометрической модели виртуального мира не обязан учитывать ограничения, накладываемые применяемой библиотекой. Он может не обращать внимания на то, что библиотека отображает на экран только канонический квадрат размером 2x2, центр которого совпадает с началом координат проекционной плоскости. Также для него не является существенным тот факт, что после проецирования и возврата к декартовой системе конвейер OpenGL отсекает вершины с координатами -1 < г < 1, a DirectX - с координатами 0 < z < 1.


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