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

Напомним, что графические библиотеки позволяют реализовать преобразование мира в систему координат наблюдателя и проецирование объектов на плоскость разными матрицами, которые передаются в конвейер независимо.

Для того, чтобы можно было применять матрицу проецирования (24.9), наблюдатель должен находиться на оси Z, а плоскость проецирования совмещена с плоскостью XY мировой системы. То есть нужно умножением на матрицу Г вычислить координаты всех вершин в новой системе, начало которой находится на оси У, и тем самым перевести мир в систему координат наблюдателя. Для ситуации, когда наблюдатель смотрит вдоль оси Z, матрица Г будет являться матрицей переноса. В общем случае матрицу Г, необходимо формировать при помощи умножения произведения матрицы переноса на матрицы вращения вокруг одной или нескольких координатных осей.

После перевода мира в систему наблюдателя, находящегося на оси Z на расстоянии d от проекционной плоскости, выполняется операция проецирования. После умножения на матрицу проецирования пирамида видимости отобразится в параллелепипед, ближняя грань которого по размерам будет равна окну ( Wx Я).

Чтобы получить канонические размеры, нужно сжать этот объем умножением на матрицу масштабирования в 1Ураз по оси X и в Я раз по оси У.

Проецирование модели на плоскость

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

Перечисленная последовательность действий объединяется в одну матрицу Р и заносится в конвейер как матрица проецирования. В DirectX для этого применяется метод SetTransform(D3DTS__PR0JECTI0N, &Р). В OpenGL при помощи функции gl Matri xMode(GL_PROJECTION ) ) указывается, к какой из хранящихся в конвейере матриц будут применяться последующие операции.

Обозначим ширину и высоту экран как W и H, а расстояние до дальней границы видимости как f и вычислим произведение матриц переноса и проецирования:


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