Далее для каждой из граней по очереди проверяется, является ли она лицевой и лежит ли она (хотя бы частично) в области видимости, задаваемой переменной viewFrustrum. Если хотя бы одно из этих условий не выполнено, то данная грань пропускается как заведомо невидимая.

Если грань удовлетворяет обоим условиям и не является порталом, то это обычная грань и она просто выводится. Если же соответствующая грань является порталом, то необходимо произвести рендеринг комнаты, видимой через данный портал. Для этого сперва определяется видимая часть портала

Пишем портальныйрендерер (чисть I)

(в качестве ее выступает пересечение портала с областью видимости) и по этой части строится новая область видимости newFrustrum. После этого по данной области у комнаты, в которую ведет данный портал, вызывается метод render для построения того, что видно через данный портал.

Рассмотрим подробнее, как происходит рендеринг сцены (рис. 7.4).

На рис. 7.4, а изображена область видимости, соответствующая порталу Р,. Обратите внимание, что этот портал целиком лежит в области видимости, поэтому видимой частью портала является весь исходный портал.

Рис. 7.4

На рис. 7.4, а изображена область видимости, соответствующая порталу Р,. Обратите внимание, что этот портал целиком лежит в области видимости, поэтому видимой частью портала является весь исходный портал.

В область видимости, соответствующую порталу Р,, частично попадают два портала - Р,, ведущий в комнату S2, и портал Р3, ведущий в комнату 54. Поэтому при обработке портала Р2 будет построена область видимости, соответствующая части комнаты S2, видимой из исходной комнаты S0. Также строится область видимости, соответствующая видимой части портала Р3.

Рассмотрим, каким образом можно производить отсечение портала (многоугольника) по области видимости. Существует два способа достижения этого"opengl6_140.html">⇐ Предыдущая| |Следующая ⇒