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, поймете сами.
В каждой точке траектории многоугольник можно:
- масштабировать (раздел scale). Обратите внимание, количество значений шкального множителя должно либо 1 (тогда масштабируется исходное сечение crossSection и далее не изменяется - это дурацкий случай, легче сразу было задать правильное сечение), либо совпадать с количеством точек в траектории (spine). Если количество значений в разделе scale больше единицы, но МЕНЬШЕ количества значений в разделе spine, то результат спецификацией VRML не определен (обычно получается бредовый объект). Если количество значений в разделе scale больше единицы, и БОЛЬШЕ количества значений в разделе spine, то лишние игнорируются.
. .
Благодаря масштабированию можно делать также всякие остроконечности - нужно только задать "scale ... ,0 0, ..."
. .
Это, конечно, не шедевр, но чего Вы хотели от неархивированного кода в 0.28кб ? :). Посмотрите в профиль на схождение на нет "заточки" "меча"...
. .
Непонятно, что это, но имхо красиво и, что важнее, короче, чем через IndexedFaceSet.
Да, так по поводу борьбы с IndexedFaceSet. Наглядный ПРИМЕР:
понадобился мне тор. Не желая делать лишней работы, залезаю в архив wrl-файлов, скачанных из сети. Нахожу (хотя и в формате VRML1), ничего себе размер - 14.6кб. . Естественно, сделано через IndexedFaceSet, небось экспортировано откуда-нибудь. Почесав в затылке, делаю свой - через extrusion. . Вот он - 0.48кб. Хороша разница - в 30 раз!. Переключитесь-ка в режим wireframe: а мой-то и покачественней! Надеюсь, убедительно.