Главная Статьи Ссылки Скачать Скриншоты Юмор Почитать Tools Проекты Обо мне Гостевая Форум |
В OpenGL произведение модельно-втиджовой матрицы и матрицы проектирования определяет все 6 отсекающих плоскостей (clip planes).
Пусть у нас задана матрица M, являющаяся произведением модельно видовой матрицы и матрицы проектирования. Тогда преобразование входной вершины с координатами (x,y,z)T в clip space задается следующим уравнением.
В этом пространстве вся видимая область определяется следующими уравнениями -
Перепишем эти неравентсва, используя первое уравнение.
Тогда после приведения всех подобных членов мы получаем следующую систему неравенств
Отсюда легко получить уравнения для всех отсекающих плоскотей - достаточно заменить знак неравентсва на знак равенства.
Ниже приводится функция, по заданной матрице, строящая все шесьб отсекающих плоскосткей.
void buildClipPlanes( const float m [16], plane * p ) { // right clipping plane. p [0] = plane ( m[3]-m[0], m[7]-m[4], m[11]-m[8], m[15]-m[12] ); // left clipping plane. p [1] = plane ( m[3]+m[0], m[7]+m[4], m[11]+m[8], m[15]+m[12] ); // bottom clipping plane. p [2] = plane ( m[3]+m[1], m[7]+m[5], m[11]+m[9], m[15]+m[13] ); // top clipping plane. p [3] = plane ( m[3]-m[1], m[7]-m[5], m[11]-m[9], m[15]-m[13] ); // far clipping plane. p [4] = plane ( m[3]-m[2], m[7]-m[6], m[11]-m[10], m[15]-m[14] ); // near clipping plane. p [5] = plane ( m[3]+m[2], m[7]+m[6], m[11]+m[10], m[15]+m[14] ); }