VRML в примерах

Изменение координат


По умолчанию любой описанный нами объект будет располагаться точно по центру окна браузера. По этой причине, если мы опишем к примеру два одинаковых цилиндра, они сольются друг с другом. Для того, чтобы изменить положение второго цилиндра, применим узел 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-код более простым и понятным.



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