|
Главная
Статьи
Ссылки
Скачать
Скриншоты
Юмор
Почитать
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] );
}