Реализация камеры на сцене. Сцена из треугольников. Отсечение по передней плоскости просмотра - простой способ

Загрузить архив с примерами ЗДЕСЬ.

В этом примере мы будем отсекать по передней плоскости треугольники.

Отсечение по передней плоскости просмотра осуществляется в пространстве вида, т.е. после умножения вершины на матрицу вида.

Почему необходимо выполнять отсечение по передней плоскости просмотра. После умножения вершин на матрицу вида, все что перед камерой (перед наблюдателем) имеет люс +Z. Все что сзади (за камерой) имеет отрицательное значение -Z.

Если камера на сцене неподвижна, или не наежает на модель - то отсечение по передней проскости просмотра выполнять не обязательно.

Модели и сцена состоят из треугольников.

К примеру у нас на сцене перед камерой размещен один треугольник - у треугольника все три вершины имеют +Z. Камера наежает на этот треугольник. После этого одна, две или все три вершины треугольника имеют -Z. Т.е.треугольник перестает быть треугольником, и не корректно рисуется на экране. И из за этого возникают искажения при растеризации такого треугольника, если не сделать отсечение по передней плоскости просмотра.

То есть после умножения очередной вершины модели на матрицу вида, мы проверяем, если у этой вершины -Z то надо сделать отсечение для треугольника. Что делает отсечение. Если все три вершины треугольника имеют -Z значит треугольник полностью находится за передней плоскостью просмотра, и такой треугольник разбивать не надо. Тругольник у которого у одна или две вершины имеют -Z мы разбиваем передней плоскостью просмотра. Если у треугольника одна вершина содержит -Z в результате разбивки мы получим 2 треугольника перед передней плоскостью - и эти 2 треугольника мы и заносим в массив для отрисовки для дальнейшего умножения на матрицу проекции. Если у треугольника две вершины содержат -Z то в результате разбивки мы получим один треугольник перед передней проскостью - этот треугольник перед передней проскостью отсечения мы заносим в массив для отрисовки и далее умножаем на матрицу проекции.

После запуска примера перемещатся по сцене можно с помощью клавиш W,S,A,D и поворачивать камеру мышей.

Реализация камеры на сцене. Использование Z- буфера. Отсечение по передней плоскости просмотра - простой способ

Код примера можно загрузить /src/03.004-camera_soft_near_plane1/Camera_Soft_Near_Plane1.

В примере используется отсечение по передней плоскости просмотра. Оно осуществляется следующим способом:

Реализация камеры на сцене. Использование Z- буфера

Следующий код примера можно загрузить /src/03.004-camera_soft_near_plane1/Camera_Soft_Near_Plane2. Этот пример показывает все то же что и предыдущий, но добавлена функция Visible_ZClip() для отбрасывания задних поверхностей.