| |||||||
|
|
Объекты, строящиеся по набору вершинВ отличие от предыдущего раздела для описания объектов, описываемых здесь, необходимо задать координаты вершин, на основе которых объект строится. 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). Для того, чтобы получить что-то вразумительное, должны выполняться три условия:
Легко догадаться, что все условия автоматически выполняются для треугольника, хотя в частном случае можете задавать плоские многоугольники с любым числом вершин. Раскраска объектов в этом узле происходит так же, как и в
IndexedLineSet: Создадим для примера кубик без одной грани средствами узла 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, поймете сами. В каждой точке траектории многоугольник можно:
ElevationGrid (рельеф по набору точек)Описание: ElevationGrid { color NULL normal NULL texCoord NULL height [] ccw TRUE colorPerVertex TRUE creaseAngle 0 normalPerVertex TRUE solid TRUE xDimension 0 xSpacing 1.0 zDimension 0 zSpacing 1.0 } Наилучшее применение узла ElevationGrid - создание рельефа. Построение ведется следующим образом: представьте себе сетку (хоть рыболовецкую, хоть авоську :) с прямоугольными ячейками и лежащую в плоскости XZ. Вы задаете количество ячеек по X и Z (разделы xDimension и zDimension) и для каждой точки пересечения "волокон" задаете ее "высоту"-координату по Y. Размеры всего объекта и его пропорции вытекают из величины зазоров между "волокнами" (разделы xSpacing и zSpacing). Вот, вкратце, и все. Довольно гладко выглядит, хотя всего 28x28 ячеек! Те, кто работал с программами от Golden Software, наверное, даже узнали функцию, выставленную по умолчанию в Grid...->Function... :) Назад | Содержание | Вперед
|
|
|
Комментарии: mailto:info@citforum.ru?Subject='From bottom of CIT FORUM' | This
Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2004 CIT Forum |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |