if(d.z - 0.0) return: j II for orthographic projections // для ортографических проекций

float m[16]: // space for a 4-by-4 matrix // место для матрицы 4 на 4

for(int i - 0: i < 16: i++) // start with identity matrix // начинаем с единичной матрицы

m[i] - (i*5 0)? 1.0 : 0.0: // identity matrix // единичная матрица

m[8] = -d.x/d.z: // add the shear terms // добавляем коэффициенты сдвига

m[9] = -d.y/d.z:

glMultMatrixf(m): // postmultiply it by m // умножаем ее справа на m }

Эта подпрограмма с помощью glOrthoO инициализирует проекционную матрицу для параллельной проекции и затем умножает получившуюся матрицу справа на матрицу сдвига. Что касается последней матрицы, то в программе используется слегка модифицированный вариант матрицы (7.19), где 0 на пересечении третьей строки и третьего столбца заменен на 1. Такой подход более совместим с OpenGL и сохраняет информацию о глубине, чтобы OpenGL смог затем произвести удаление невидимых поверхностей. В тематическом задании 7.3 предоставляется возможность поэкспериментировать с созданием косоугольных проекций.

Практические упражнения

7.6.5. Анализ проекционной матрицы Покажите, что равенство (7.18) правильно описывает проекционную матрицу, используемую в OpenGL. Иначе говоря, покажите, что эта матрица преобразует каждый угол отображаемого объема в нужный угол канонического отображаемого объема.

7.6.6. Нахождение вектора п Определите компоненты вектора п, которые задают коэффициенты укорачивания (foreshortening ratios) по осям х, у, г, соответственно равные 0,6, 0,4, 0,7. При скольких различных направлениях вектора n можно получить такие коэффициенты укорачивания?

7.6.7. Вектор n в сферических координатах Определите три коэффициента укорачивания для вектора п, имеющего широту 60° и долготу 125°.

7.6.8. Нарисуйте куб Нарисуйте от руки последовательность диметрических проекций куба, для которых пу = -пг, а пх возрастает от 0 до 1.

7.6.9. Камера в сферических координатах Какие значения могут принимать широта и долгота вектора n при изометрической проекции?


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