Учебник по VRML 97

         

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кб ? :). Посмотрите в профиль на схождение на нет "заточки" "меча"...

  • вращать (раздел orientation). Задается направление оси вращения (первые три числа) и угол в радианах. Вращать можно как по часовой стрелке, так и против (знак угла). Количество значений в разделе orientation определяется так же, как и для масштабирования.
  • . .

    Непонятно, что это, но имхо красиво и, что важнее, короче, чем через IndexedFaceSet.

    Да, так по поводу борьбы с IndexedFaceSet. Наглядный ПРИМЕР:

    понадобился мне тор. Не желая делать лишней работы, залезаю в архив wrl-файлов, скачанных из сети. Нахожу (хотя и в формате VRML1), ничего себе размер - 14.6кб. . Естественно, сделано через IndexedFaceSet, небось экспортировано откуда-нибудь. Почесав в затылке, делаю свой - через extrusion. . Вот он - 0.48кб. Хороша разница - в 30 раз!. Переключитесь-ка в режим wireframe: а мой-то и покачественней! Надеюсь, убедительно.



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