Определение собственных объектов
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 {...}
...
дают совершенно разный результат.
|