Построение примитивов в VRML

Язык построения трехмерных сцен VRML имеет свои отличительные стороны. Это выражается в построении кода и структуре файла VRML сцены.

Файл VRML всегда начинается с заголовка:

Заголовок сообщает браузеру, что перед ним VRML файл, а также версию и кодировку файла.

VRML-мир описывается при помощи иерархического графа сцены. Основные строительные объекты графа называются узлами (nodes). В VRML97 определены 54 типа узлов. Среди них – геометрические примитивы, узлы, определяющие внешний вид объектов, узлы звука и его свойств, несколько типов группирующих узлов. Внутри узлов находятся поля, хранящие свойства объекта. В VRML97 есть 20 типов полей. В них может храниться что угодно, от размера куба до еще одного узла. Узлы записываются следующим образом:

Узел Group – простейший узел, он просто группирует вместе другие узлы [3].

В VRML существует основные четыре типа геометрических примитивов. Это прямоугольный параллелепипед (Box), цилиндр (Cylinder), сфера (Sphere) и конус (Cone). Форму каждого из этих примитивов представить несложно, это обычный прямоугольный параллелепипед или куб, цилиндр, сфера, конус. Единственная разница между ними это способ описания, он индивидуален для каждого примитива.

Узел Box со всеми параметрами по умолчанию – это куб со стороной 2 метра, центром в начале координат и сторонами параллельными координатным осям. В этом случае Box будет описываться так:

Но данное описание должно происходить в узле Shape, так как именно в этом узле содержится описание всех объектов. В этом узле всего два поля: внешность (appearance) и геометрия (geometry). Для создания простого куба необходимо поле geometry. Вот пример программы создающей стандартный куб:

Но конечно можно задавать куб и с любыми размерами. Размеры задаются по осям X, Y и Z, и все размеры должны быть положительны. Вот пример куба со сторонами 5 метров:

Внутреннее пространство куба зависит от браузера, в котором этот куб просматривают. В основном внутреннего пространства у куба просто нет, если наблюдатель заходит внутрь куба, то куб просто пропадает.

Узел Cylinder немного сложнее, он включает больше параметров. Кроме параметров, отвечающих за размер, у него присутствуют параметры, отвечающие за отображение боковых поверхностей, верхнего и нижнего основания. Ось цилиндра по умолчанию ориентирована параллельно оси Y.

Параметры по умолчанию можно не указывать если их не изменять, поэтому простой цилиндр стоится вот так:

Первый параметр у цилиндра это radius, соответственно задает радиус цилиндра. Параметр height отвечает за высоту цилиндра. Следующие параметры имеют логические значения либо лож, либо истина. Это параметры: side (боковая поверхность), top (верхнее основание) и bottom (нижнее основание) [3]. Если эти параметры имеют значение лож, то цилиндр не будет отображаться вообще. Вот цилиндр без верхнего основания:

Узел Cone очень похож на узел Cylinder, с той разницей что поле radius заменено на поле bottomRadius (радиус нижнего основания) и поле top отсутствует, так как у конуса нет верхнего основания. В остальном описание происходит точно так же. Вот пример описания конуса:

Узел Sphere, достаточно прост, он имеет только одно поле – radius. По умолчанию сфера имеет радиус 1 метр и цент в точке 0,0,0. Вот так просто описывается сфера: