| |||||||||
В отличие от предыдущего раздела для описания объектов, описываемых здесь, необходимо задать координаты вершин, на основе которых объект строится. | |||||||||
PointSet (набор точек)
Описание:
| PointSet { coord NULL color NULL } Поскольку по умолчанию coord=color=NULL, то вставка в код узла PointSet без аргументов не приведет ни к чему, не будет создано ни одной точки. Количество записей в разделе color должно точно соответствовать количеству точек, описанных в разделе coord! Мне лично такой узел кажется бесполезным, но с его помощью можно сотворить что-нибудь такое: Просмотр. Текст кода. Надеюсь, Вы рассмотрели чередующиеся красные, зеленые и синие точки на экране. IndexedLineSet (линии по набору точек)
| Описание:
| IndexedLineSet { color NULL coord NULL colorIndex [] colorPerVertex TRUE coordIndex [] } Схема использования этого узла заключается в следующем: в разделе coord описывается набор точек, а в разделе coordIndex приводятся последовательности точек (их номера в списке раздела coord), которые соединяются отрезками. Конец последовательности обозначается приведением после номера последней точки значения -1. Для этого узла важно разобраться со способами раскраски отрезков. Если у Вас ничего не прописано в разделе color, то ничего не увидите, т.к. отрезки не окрашены (хотя можно при этом воспользоваться emissiveColor в разделе appearance (об этом см далее)) Если colorPerVertex TRUE, то цвет из списка в разделе color приписывается ВЕРШИНАМ, а отрезки, соединяющие их окрашиваются с градиентом от цвета одной вершины к цвету другой. Вот, например, "знак Зорро" :) Просмотр. Текст кода. Если colorPerVertex FALSE, то цвета из списка в разделе color приписывается КАЖДОЙ ПОЛИЛИНИИ, а не каждому ОТРЕЗКУ! Вот тот же код, только с colorPerVertex FALSE. Как видно, всей полилинии из вершин 1 0 3 2 приписан красный цвет, первым описанный в color. Тогда оставшиеся зеленый, синий и белый цвета просто не нужны. Проверьте vorlon'ом. Просмотр. Текст кода. Давайте вернемся к нашему столу, на котором уже стоит глобус. Предлагаю поставить на нее, например, клетку, пока пустую. Просмотр. Текст кода. 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. Вот то-то же :). Правда, все-таки, использование подобных геометрически правильных объектов довольно ограничено. Но если Вас такое интересует, плиз в мыло: хочется познакомится с такими героями :) Extrusion (экструзия, выдавливание)
| Описание:
| Extrusion { beginCap TRUE ccw TRUE convex TRUE creaseAngle 0 crossSection [1 1, 1 -1, -1 -1, -1 1, 1 1] endCap TRUE orientation 0 0 1 0 scale 1 1 solid TRUE spine [0 0 0, 0 1 0] } Узел Extrusion - это основное орудие борьбы с IndexedFaceSet, позволяющее сильно сократить объем файла. Работает узел очень просто: сначала описывается МНОГОУГОЛЬНИК в плоскости с Y=0 (поэтому в разделе crossSection="сечение" только две координаты) и траектория его движения в пространстве (раздел spine). Разделы beginCap и endCap определяют, будут ли грани-"крышки" на торцах Вашего объекта. Я плохо понимаю, для чего по умолчанию solid выставлен TRUE: в спецификации написано, что значением этого раздела регулируется, будут ли видны одна или обе стороны многоугольника одновременно, в общем поиграйтесь с FALSE/TRUE, поймете сами. В каждой точке траектории многоугольник можно:
|