VRML предоставляет прекрасную возможность сократить и сделать более понятным исходный код VRML-файла путем описания собственных объектов. Это значит, что если в изображении несколько раз повторяется одна и та же фигура, то ее можно описать всего лишь один раз и в дальнейшем только ссылаться на нее.
Объект описывается одним из способов:
DEF name Cube {}
или
DEF name Material {}
или
DEF name Separator { Сгруппированные узлы, описывающие фигуру и свойства материала }
Для того, чтобы вставить в VRML-файл ранее определенную фигуру, используется команда USE
Separator { USE name }
Создадим VRML-файл, описывающий стул, при этом ножку стула опишем как объект LEG:
#VRML V1.0 ascii Material { emissiveColor 1 0.5 0.5 } Separator { Translation { translation 1 1 1 } DEF LEG #Определяем объект - ножку стула Separator { # leg Cylinder { height 0.8 radius 0.1 } } # определили ножку } Separator { Translation { translation 0 1 1 } USE LEG # используем определенный объект } Separator { # еще одна ножка Translation { translation 1 1 0 } USE LEG } Separator { # последняя ножка Translation { translation 0 1 0 } USE LEG } Separator { # сиденье Translation { translation 0.49 1.5 0.5 } Cube { height 0.2 width 1.2 depth 1.2 } } Separator { # спинка Translation { translation 0.49 2 0 } Cube { height 0.8 width 1.2 depth 0.2 } } Separator { # закругление спинки Translation { translation 0.49 2.1 0 } Rotation { rotation 1 0 0 1.57 } Cylinder { radius 0.6 height 0.2 } }
Как видите, нам не понадобилось описывать каждую ножку в отдельности - в результате объем VRML-кода стал меньше, а сам код более читабельным.
Еще один способ уменьшить размер VRML-файла - вставлять фигуры из другого файла.
Это позволяет делать узел WWWInline:
#VRML V1.0 ascii Separator { WWWInline { name "" bboxSize 0 0 0 bboxCenter 0 0 0 } }
Параметр name - это путь к файлу, параметры bboxSize и bboxCenter не обязательны и показывают пользователю размеры и положение вставляемого объекта, пока объект подгружается.
Вместо заключения, хочется обратить Ваше внимание на две особенности VRML, незнание которых сильно затруднит создание VRML-документов вручную.
- Все описания узлов и параметров в VRML регистрозависимы. Если Вы используете буквы неправильного регистра - то VRML-браузер просто проигнорирует такое описание.
- В VRML имеет огромное значение порядок описания узлов. Так к примеру, описание
... Rotation {...} Scale {...} ...
и описание... Scale {...} Rotation {...} ...