Самоучитель по 3dsmax 7

         

Порталы


УДАЛЕНИЕ НЕВИДИМЫХ ЧАСТЕЙ
3.4. Порталы

Этот метод предназначен для т.н. indoor environments - в буквальном переводе "комнатная среда"; это как бы внутренность какого-то здания. В качестве примера могут служить Doom, Quake.

В этом случае сцена составляется из комнат. Комнаты связаны друг с другом какими-то проходами - дверями, окнами, чем угодно. На каждый такой проход вешается обычный полигон, называемый порталом. Для отрисовки сцены достаточно нарисовать текущую комнату вместе с тем, что из нее видно. Но то, что из нее видно, может быть видно *только* через порталы.

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

Как обычно, кусок кода для уяснения: // ... void drawRoom(int roomID, polygon *clipArea) { int i; for (i = 0; i < rooms[roomID].numFaces; i++) drawFace(&rooms[roomID].face[i], clipArea); } void drawFace(polygon *face, polygon *clipArea) { polygon *newClipArea; if (face->isPortal) { if (isVisible(face, clipArea) { newClipArea = clipPolygon(face, clipArea); drawRoom(face->destinationRoom, newClipArea); } } else drawClippedPolygon(face, clipArea); } // ...



Содержание раздела