Учебник по VRML 97

IndexedFaceSet (грани по набору точек)


Описание:

IndexedFaceSet { coord NULL color NULL normal NULL texCoord NULL ccw TRUE colorIndex [] colorPerVertex TRUE convex TRUE coordIndex creaseAngle 0 normalIndex [] normalPerVertex TRUE solid TRUE texCoordIndex [] }

Вот он! Вот он! Узел, которым можно заменить все остальные узлы, связанные с описанием граней. Все люди, использующие экспорт в VRML код из какого-нибудь 3D моделлера, получают файл, набитый только IndexedFaceSet. Принцип работы узла очень похож на IndexedLineSet: описан набор координат точек (coord) и указано, какие из них должны образовать грань (coordIndex).

Для того, чтобы получить что-то вразумительное, должны выполняться три условия:

  1. каждая грань должна состоять как минимум из трех несовпадающих вершин
  2. вершины должны задавать ПЛОСКИЙ многоугольник
  3. многоугольник должен быть несамопересекающимся

Легко догадаться, что все условия автоматически выполняются для треугольника, хотя в частном случае можете задавать плоские многоугольники с любым числом вершин.

Раскраска объектов в этом узле происходит так же, как и в IndexedLineSet:

при colorPerVertex TRUE цвет приписывается ВЕРШИНАМ, а грань заливается градиентом между всеми вершинами, которыми грань создана.

при colorPerVertex FALSE цвет приписывается каждой ГРАНИ в порядке, соответствующем порядку цветов в разделе color

Создадим для примера кубик без одной грани средствами узла IndexedFaceSet и раскрасим, пользуясь colorPerVertex TRUE

. .

А теперь переключитесь в режим просмотра wireframe: видите, хотя мы описали КВАДРАТНЫЕ грани, броузер все равно представляет их, как состоящие из треугольников, так же, как и все остальные объекты, так что узел IndexedFaceSet - это по определению основная форма представления объектов в VRML.

В разделе я упоминал о программах визуализации трансляционно-симметричных структур.

Вот, посмотрите несколько примеров использования узла IndexedFaceSet

.

.

.

"Фи" - кто-то скажет, - "примитив". Верно, но даже в VRML редакторе (а уж ручками...) Вам придется попотеть, прописывая кучу раз USE. А если я скажу, что при создании этих примеров входные данные для программы составили 2-3 строчки?! И при этом можно построить объектов, сколько хочется: не 4x4x4, как в приведенных примерах, а 1000x1000x1000. Вот то-то же :). Правда, все-таки, использование подобных геометрически правильных объектов довольно ограничено. Но если Вас такое интересует, плиз в : хочется познакомится с такими героями :)



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