Положение объектов в пространстве
Изменение координат По умолчанию любой описанный нами объект будет располагаться точно по центру окна браузера. По этой причине, если мы опишем к примеру два одинаковых цилиндра, они сольются друг с другом. Для того, чтобы изменить положение второго цилиндра, применим узел Translation.
Узел Translation определяет координаты объекта:
Translation { translation 1 2 3 #т.е. соответственно x=1 y=2 z=3
}
Вообще говоря, координаты указываемые в Translation не являются абсолютными. Фактически это координаты относительно предыдущего узла Translation. Чтобы прояснить это вопрос, рассмотрим пример:
#VRML V1.0 ascii Cube {
width 1
height 1
depth 1
}
# Этот куб по умолчанию располагается в центре
Translation {
translation 2 0 0
}
#Второй куб сдвинут вправо на 2
Cube {
width 1
height 1
depth 1
}
Translation {
translation 2 0 0
}
#Третий куб сдвинут вправо на два относительно 2-го !!!!
Cube {
width 1
height 1
depth 1
}
Как видите, третий кубик вовсе не совпадает с первым, хотя в в узле Translation указаны те же координаты.
В VRML 1.0 принято следующее правило: узлы, модифицирующие свойства фигур (Translation, Material и т.п.), действуют на все далее описанные фигуры.
Чтобы ограничить область действия модифицирующих узлов, фигуры необходимо сгруппировать с помощью узла Separator.
Separator {
другие узлы
}
Узел Separator работает как контейнер, он может содержать любые другие узлы, и основным его предназначением является именно ограничение области действия узлов типа Translation и Material.
Сравните следующий пример с предыдущим:
#VRML V1.0 ascii Separator {
Cube {
width 1
height 1
depth 1
}
}# конец области действия узла Separator
Separator {
Translation {
translation 2 0 0
}
#Второй куб сдвинут вправо на 2
Cube {
width 1
height 1
depth 1
}
}# конец области действия узла Separator
Separator {
Translation {
translation 2 0 0
}
#Третий куб сдвинут вправо на два относительно 1-го.
Cube {
width 1
height 1
depth 1
}
}# конец области действия узла Separator
Хотя в примере описано три кубика, мы видим только два, так как второй и третий совпадают.
Вообще говоря рекомендуется всегда и везде использовать узел Separator. Он не только избавит от ошибок, связанных с относительностью координат, но и сделает VRML-код более простым и понятным.
Вращение
Для вращения фигур вокруг осей координат применяется узел Rotation.
Rotation {
rotation 0 1 0 1.57
}
Первые три цифры определяет будет ли осуществлен поворот вокруг соответственно осей x, y и z, а четвертая задает угол вращения в радианах. В приведенном выше листинге поворот осуществляется вокруг оси y на 90 градусов.