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-документов вручную.

  1. Все описания узлов и параметров в VRML регистрозависимы. Если Вы используете буквы неправильного регистра - то VRML-браузер просто проигнорирует такое описание.
  2. В VRML имеет огромное значение порядок описания узлов. Так к примеру, описание
           ...
    
           Rotation {...}
    
           Scale {...}
    
           ...
    и описание
         ...
    
         Scale {...}
    
         Rotation {...}
    
         ...
дают совершенно разный результат.