Последнее выражение получено для случая, когда камера направлена вдоль оси Z. В библиотеке OpenGL направление взгляда противоположно оси Z, и в пирамиду видимости попадут объекты с отрицательными значениями координаты Z. Чтобы были видимыми объекты полупространства с положительными коордиПроецирование модели на плоскость

натами z, как это делается в библиотеке DirectX, мир необходимо предварительно отразить симметрично плоскости XY. Попробуйте самостоятельно получить матрицу, выполняющую отражение, перенос и проецирование вершин.

При использовании уравнения (24.7) из точек (д:, г/, z) принадлежащих пирамиде видимости, получаются точки (хэ, уэ, z3), которые теперь тоже не лежат на плоскости проецирования, а заполняют некоторый объем.

При обсуждении рис. 21.1 указывалось, что проекции точек грани пирамиды видимости попадают на край окна. Это значит, что при помощи выражения (24.9) все точки (х, у, z), которые заполняли пирамиду видимости, преобразуются в точки (хэ, уэ, z9), заполняющие параллелепипед с гранями, параллельными координатным плоскостям. В таких случаях говорят, что выражение отображает одну область пространства в другую. Пирамида видимости, показанная на рис. 21.1, отобразилась в параллелепипед видимости, показанный на том же рисунке.

Следующее выражение показывает, что вдоль оси Z точки пирамиды после отображения располагаются в интервале от 0 (при z = 0) до d (при z, стремящемся к бесконечности):

Видимый объем оказался сжатым вдоль оси Z. При этом точки с координатой d оказались на расстоянии d/2 от наблюдателя.

Дальняя граница видимости при проецировании оказалась на расстоянии Если необходимо, чтобы полученный при проецировании параллелепипед видимости был виден на экране, его надо привести к каноническому объему, то есть масштабировать его так, чтобы значения (хэ, уэ) попали в диапазон (-1, +1), az3 - в диапазон (0, 1) для DirectX и (-1, 1) для OpenGL. То есть при работе с OpenGL полученный объем потребуется не только масштабировать, но и сдвинуть по оси Z.


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