Позвольте пользователю посредством нажатия клавиш увеличивать и уменьшать отношения djd2 и dg/dj что даст возможность создавать различные косоугольные проекции. Определите, когда получается кабинетная проекция и когда - косоаксонометрическая.

7.8. Тематические задания Тематическое задание 7.4. Самодельное проецирование (если бы OpenGL был недоступен)

Уровень сложности III.

Напишите приложение, осуществляющее перспективные проекции трехмерных объектов с использованием вашего собственного графического конвейера вместо конвейера OpenGL. Эта задача проще, чем может показаться вначале; требуется только сформировать собственную матрицу моделирования-вида (modViewMat[16]), проекционную матрицу (projMat[16]) и подпрограмму отсечения (для нее можно использовать код из листинга 7.4).

Для текущей визуализации вы можете все же использовать OpenGL (если, конечно, он вам доступен). Для отключения матрицы моделирования-вида и проекционной матрицы OpenGL загрузите в них единичные матрицы. OpenGL будет по-прежнему выполнять отсечение границами канонического отображаемого объема. Запустите свою программу на полет вокруг различных каркасных объектов и сквозь них наблюдайте эффект отсечения.

Тематическое задание 7.5. Удаление невидимых граней для большей эффективности Уровень сложности II.

При визуализации каркасного объекта каждая из его граней посылается в графический конвейер, ее вершины подвергаются преобразованиям, и затем грань визуализируется. Однако при любой ориентации объекта существует много граней, «скрытых» от наблюдателя. Поэтому они носят название невидимых граней (back faces) и нет необходимости пропускать их через графический конвейер, поскольку их не будет видно. Какая-либо грань находится ближе к глазу и поэтому заслоняет их. На рис. 7.49 показан классический базовый сарай, наблюдаемый некоторой камерой. Для любой позиции камеры некоторые из граней этого сарая будут нелицевыми; две из них отмечены на рисунке.

а б Рис. 7.49. Нелицевые грани сарая (а); определение нелицевой грани (б)


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