Жирным черным шрифтом обозначаются заголовки или важние
замечания
Файл в формате VRML
Такой файл должет оканчиваться суффиксом .wrl, в первой
строке должно быть указано: #VRML V2.0 utf8 эта строка указывает
смотрелке какая версия vrml использовалась
Коррдинатная система
Координатная система (КС) в vrml построена по иерархическому
принципу - каждый объект имеет свою собственную (локальную) систему координат и
может встраиваться в другие объекты (или наборы объектов, виртуальные миры или
их фрагменты), при этом указываются координаты точки в КС , в которую
вставляется объект. Координата 0,0,0 встраиваемого объекта устанавливается в эту
точку и все точки встраиваемого объекта пересчитываюся интерпретатором vrml в
соответствие с их новым положением.
Представление цвета
Цвет определяется тремя основными составляющими RGB (красный
зеленый синий). Каждая составляющая представляется числом от 0 до 1. К примеру
[0.5 1 0]
Поля
Поля - элементарные типы данных, используемые в vrml для
представления геометрической информации, описаний материалов и т.д. Имеются
следующие поля:
SFBool - двоичный тип, может принимать значения - TRUE
или FALSE SFColor/MFColor - цвет,
определяется одним RGB или несколькими (ноль или больше), Пример SFColor
foocolor [0 0.3 0.9] MFColor fooColor [ 1 0 0, 0 1 0, 0 0 1 ]
SFFloat/MFFloat - действительное число с плавающей точкой или набор
таких чисел разделенных запятой. Пример SFFloat [1.238] MFFloat [0.235, 2.66,
55.7] SFImage - 2-х мерная картинка определяемая: ширина высота
число_пикселей набор_пикселей. Пример: fooImage 1 2 2 0.5 0.6
SFInt32/MFInt32 - целое 32-битное число или набор челых чисел
разделенных запятой SFNode/MFNode - одна нода или группа нод
SFRotation/MFRotation - вращение или группа полей разделенных запятой
определяющих вращение. Определяется ось_X ось_Y ось_Z угол (радианы) Пример [0 0
1 3.14] - поворот вокруг оси Z на 180 градусов SFString/MFString -
строка или группа строк разделенных запятой Пример [Раз, Два, Три]
SFTime/MFTime - время или группа полей разделенных запятой
определяющий время прошедшее с 1 января 1970 года SFVec2f/MFVec2f -
двухмерный вектор или группа двухмерных векторов Определяется: [координыта
начальной точки, смещение_S, смещение_T] Если начальная тока 0 0 то она
опускается Пример [ 12 48, 55, 88] SFVec3f/MFVec3f - трехмерный вектор или группа
трехмерных векторов Определяется: [координыта начальной точки, смещение_X,
смещение_Y, смещение_Z]. Если начальная тока 0 0 0 то она опускается
Пример [ 12 48 99, 55, 88 12]
Ноды
Ноды - основные элементы vrml. Служат для описания
геометрических или физичесикх свойств объектов. Геометрические ноды
ProximitySensor, VisibilitySensor, TouchSensor, CylinderSensor,
PlaneSensor, SphereSensor. Генерируют события согласно действиям пользователя,
такие как двежения миши или перемещение в виртуальном
пространстве
Группирующие ноды
Anchor, Billboard, Collision, Group, Transform. Группируют подчиненые (child) ноды
или другие группы нод. Позволяют производить над группами различные
действия.
AudioClip, DirectionalLight, PointLight , Script, Shape, Sound,SpotLight, WorldInfo - ноды определяющие
звековое сопровождение, освещение, JAVA скрипты, информацио о vrml-сцене и
формы
Геометричекие ноды
Куб - Box Box {
field SFVec3f size 2 2 2 #размер куба по трем осям (2 2 2 -
пример записи) } отсчет вектора size ведется от центра куба к
стенкам по осям X Y Z Нуль КС находится в центре куба
Цилидр - Cylinder Cylinder {
field SFBool bottom TRUE #есть или нет низ цилиндра
field SFFloat height 2 #высота (2 - пример
записи) field SFFloat radius 1 #радиус (1
- пример записи) field SFBool side TRUE #есть
или нет боковая поверхность field SFBool top
TRUE #есть или нет верх } Нуль КС находится в
центре цилиндра. Если Какае-либо поле из bottom, side, top имеет значение FALSE
- то соответствующую сторону не видно и не срабатывают сенсоры т.е. можной
"пройти"
Сфера - Sphere Sphere { field SFFloat radius 1 #радиус (1 - пример записи) } Нуль КС находится в центре сферы
Конус - Cone Cone { field SFFloat bottomRadius 1 #радиус основания field SFFloat height 2 #высота field SFBool side TRUE #есть или нет боковая
поверхность field SFBool bottom TRUE #есть или
нет низ } Нуль КС находится в середине линии соединяющей вершину
и центр основания Если Какае-либо поле из bottom, side имеет значение FALSE
- то соответствующую сторону не видно и не срабатывают сенсоры т.е. можной
"пройти"
Набор
многоугольников для описания объекта - IndexedFaceSet IndexedFaceSet
{ eventIn MFInt32 set_colorIndex # eventIn MFInt32 set_coordIndex # eventIn
MFInt32 set_normalIndex # eventIn MFInt32
set_texCoordIndex # exposedField SFNode
color NULL # должен содержать ноду Color exposedField SFNode coord NULL # должен содержать
ноду Coordinate exposedField SFNode normal NULL
# должен содержать ноду Normal exposedField SFNode
texCoord NULL # должен содержать TextureCoordinate field SFBool ccw TRUE # field MFInt32 colorIndex [] # field SFBool colorPerVertex TRUE # field SFBool convex TRUE # field MFInt32 coordIndex [] # field SFFloat creaseAngle 0 # field MFInt32 normalIndex [] # field SFBool normalPerVertex TRUE # field SFBool solid TRUE # field MFInt32 texCoordIndex [] # } IndexedFaceSet - представляет трехмерную фигуру составленную из
многоугольников, которые построены из вершин, которые представлены в поле
coord . Поле coordIndex определяет из каких вершин строится
очередной многоугольники, -1 заканчивает описание очередного многоугольника (в
конце -1 не обязательно). Например [1 2 5 8 10 -1 3 4 6 7] (первый многоугольник
состоит из вершин с индексами 1 2 5 8 10), при этом отсчет вершин начинается с
0. Если colorPerVertex = FALSE, то
если colorindex не пустой, то цвет каждого многоугольника
определяется соответсвующим индексом из colorindex , опредеялющим порядковый
номер цвета описанного в ноде Color если colorindex пустой, то цвет каждого
многоугольника определяется соответсвующим цветом описанным в ноде Color, т.е.
описаний цветов в ноде Color должно быть столько сколько описано
многоугольников
Если colorPerVertex = TRUE, то
если colorindex не пустой, то цвет каждой вершины определяется
соответсвующим индексом из colorindex , опредеялющим порядковый номер цвета
описанного в ноде Color если colorindex пустой, то цвет каждой вершины
определяется соответсвующим цветом описанным в ноде Color, т.е. описаний цветов
в ноде Color должно быть столько сколько описано вершин
Если Normal пустое то нормали генерируются
автоматически, используя поле creaseAngle . Если не пустое то нормали
берутся из ноды Normal в соответствие с индексами в normalIndex
Если texCoordIndex не пустое то текстуры для каждой
плоскости берутся из поля texCoord в соответствие с индексами в texCoordIndex
при этом описание каждой плоскости заканчивается -1 Если texCoordIndex
пустое то текстуры для каждой плоскости берутся из поля texCoord по порядку
Набор линий для описания
объекта - IndexedLineSet IndexedLineSet { eventIn MFInt32 set_colorIndex eventIn
MFInt32 set_coordIndex exposedField SFNode
color NULL # должен содержать ноду Color exposedField SFNode coord NULL # должен содержать ноду
Coordinate field MFInt32 colorIndex [] field SFBool colorPerVertex TRUE field MFInt32 coordIndex [] } IndexedLineSet - представляет трехмерную фигуру составленную из полилиний,
которые построены из вершин, которые представлены в поле coord . Поле
coordIndex определяет из каких вершин строится очередная полиния, -1
заканчивает описание очередной полинии (в конце -1 не обязательно). Например [1
2 5 8 10 -1 3 4 6 7] (первая полилиния состоит из вершин с индексами 1 2 5 8
10), при этом отсчет вершин начинается с 0. Если colorPerVertex =
FALSE, то
если colorindex не пустой, то цвет каждой полилинии
определяется соответсвующим индексом из colorindex , опредеялющим порядковый
номер цвета описанного в ноде Color если colorindex пустой, то цвет каждой
полилинии определяется соответсвующим цветом описанным в ноде Color, т.е.
описаний цветов в ноде Color должно быть столько сколько описано
многоугольников
Если colorPerVertex = TRUE, то
если colorindex не пустой, то цвет каждой вершины определяется
соответсвующим индексом из colorindex , опредеялющим порядковый номер цвета
описанного в ноде Color если colorindex пустой, то цвет каждой вершины
определяется соответсвующим цветом описанным в ноде Color, т.е. описаний цветов
в ноде Color должно быть столько сколько описано вершин
Набор точек PointSet PointSet { exposedField SFNode color NULL # должен содержать
ноду Color exposedField SFNode coord NULL # должен
содержать ноду Coordinate } PointSet - представляет набор
трехмерных точек , которые представлены в поле coord Для каждой точки
может быть определен цвет в поле color Если color не определено то
используется определение цвета в ноде Material (см. Shape)
Сетка - ElevationGrid ElevationGrid { eventIn MFFloat set_height exposedField
SFNode color NULL exposedField SFNode
normal NULL exposedField SFNode
texCoord NULL field MFFloat
height [] field SFBool
ccw TRUE field SFBool
colorPerVertex TRUE field SFFloat
creaseAngle 0 field SFBool
normalPerVertex TRUE field SFBool
solid TRUE field SFInt32
xDimension 0 field SFFloat
xSpacing 0.0 field SFInt32
zDimension 0 field SFFloat
zSpacing 0.0 } ElevationGrid определяет
прямоугольную сетку в локальной КС в плоскости X-Z. В каждом узле сетки
определена высота (по оси Y). Геометрия описывается скалярным массивом,
содержащим значения высот для каждого узла сетки xDimension и zDimension -
количество ячеек в сетке по осям X и Z соответсвенно должно быть > 1
xSpacing и zSpacing - расстояние между узлами в сетке по осям X и Z
соответсвенно не равно нулю height - массив высот (координат по оси Y) для
каждого узла сетки.
Extrusion { eventIn MFVec2f
set_crossSection eventIn MFRotation set_orientation eventIn MFVec2f set_scale eventIn
MFVec3f set_spine field SFBool beginCap
TRUE field SFBool ccw TRUE field SFBool convex TRUE field
SFFloat creaseAngle 0 field MFVec2f
crossSection [ 1 1, 1 -1, -1 -1, -1 1, 1 1 ] field
SFBool endCap TRUE field MFRotation
orientation 0 0 1 0 field MFVec2f
scale 1 1 field SFBool solid
TRUE field MFVec3f spine [ 0 0 0, 0 1 0 ] }
Ноды определяющие
свойства геометрических нод
Цвет - Color Color
{ exposedField
MFColor color [] } Определяет набор цветов RGB,
разделенных запятыми. Используется исключительно для определения наборов цвета
поверхностей в таких нодах как IndexedFaceSet и др
Координаты -
Coordinate Coordinate { exposedField MFVec3fpoint [] } Определяет набор трех-мерных координат для использования в поле
coord таких геометрических нод, как IndexedFaceSet, IndexedLineSet, PointSet.
Нормаль - Normal
Normal { exposedField MFVec3f vector [] } Определяет набор нормалей для трех-мерных плоских поверхностей
для использования в поле normal для таких геометрических нод, как
IndexedFaceSet, ElevationGrid.
Координаты текстуры
TextureCoordinate TextureCoordinate { exposedField
MFVec2f point [] } Определяет набор двух мерных координат
текстур для таких геометрических нод, как IndexedFaceSet, ElevationGrid для
наложения текстуры на многоугольники определяемые в геометрических нодах.
Текстуры имеют две размерности S и T , которые имеют значения от 0.0 до 1.0.
S - горизонтальная координата - определяется первой за ней следует
координата T.
Группирующие ноды
Transform Transform { eventIn MFNode addChildren eventIn MFNode removeChildren exposedField
SFVec3f center 0 0 0 exposedField
MFNode children [] exposedField SFRotation
rotation 0 0 1 0 exposedField SFVec3f
scale 1 1 1 exposedField SFRotation
scaleOrientation 0 0 1 0 exposedField SFVec3f
translation 0 0 0 field SFVec3f
bboxCenter 0 0 0 field SFVec3f
bboxSize -1 -1 -1 } Transform -
группирующая нода, которая определяет систему координат для дочерних нод
относительно родительской координатной системы bboxCenter и bboxSize
определяют положение центра и размер куба в который внисывается дочерняя
нода, если этот размер меньше чем реальный размер ноды - результат
непредсказуем, если эти поля не определены то соответствующие параметры
вычисляются смотрелкой center - определяет смещение относительно
локальной системы координат rotation - поворот дочерней ноды в
координатной системе, первые три цифры определяют вокруг каких осей нужно
поворачивать, четвертая угол поворота в радианах (пример 0 0 1 3.14 - поворот
вокруг оси Z на 180 градусов) scale - масштабирование, три цыфры
указывают коэффициенты масштабирование по каждой из осей (должны быть больше 0)
пример 0.5 0.5 1 - сжать по осям X и Z наполовину, по оси Z оригинальный размер
scaleOrientation - определяет разворот координатной системы при
масштабировании (не имеет смысла если не указано scale!!!) параметра аналогично
scale translation - расположение дочерней ноды в родительской системе
координат, параметры - координаты X Y Z в родительской СК children []
- внутри квадратных скобок должны заключаться дочерние ноды или группы
дочерних нод (в том числе и transform)
Прочие ноды Shape - форма Shape { exposedField
SFNode appearance NULL exposedField SFNode geometry NULL } Shape имеет два поля: appearance и geometry которые используются для
описания рендеринга. appearance определяет ноду Appearance , которая
определяет визуальные свойства геометрической формы geometry
определяет ноду geometry, которая определяет геометрические свойства формы
Внешний вид Appearance - Внешний вид Appearance { exposedField SFNode material NULL exposedField SFNode texture NULL exposedField SFNode textureTransform NULL } Нода Appearance определяет такие визуальные свойства как цвет, текстура,
способ отражения света. Значение каждого поля может быть NULL, если не NULL то
должно содержать соответствующюю ноду.
material поле должно содержать ноду Material. Если
material NULL или не указан, освещение считается выключенным и при рендеринге
используется цвет 0 0 0 . texture поле может содержать различные типы
текстурных нодof (ImageTexture, MovieTexture, PixelTexture). Если NULL или не
определено никаких текстур не накладывается.
textureTransform поле содержит нодуTextureTransform .
Если NULL или неопределено, или если textureTransform NULL или неопределено, то
textureTransform не имеет эффекта.
Material - материал Material
{ exposedField SFFloat ambientIntensity 0.2 exposedField SFColor diffuseColor 0.8 0.8 0.8 exposedField SFColor emissiveColor 0 0 0 exposedField SFFloat shininess 0.2 exposedField
SFColor specularColor 0 0 0 exposedField SFFloat
transparency 0 } ambientIntensity -
интенсивность окружающего света diffuseColor - определяет
цвет,отражающий все источники света в зависимости от угла падения каждого
источника света emissiveColor - излучаемый цвет (лампочка к примеру)
shininess - интенсивность блеска поверхности specularColor -
цвет блеска поверхности (например блеск бока яблока под ярким светом)
интенсивность блеска - shininess transparency - прозрачность
объекта 1 - полностью прозрачный, 0 - непрозрачный
ImageTexture - текстура
картинка ImageTexture { exposedField MFString
url [] field SFBool repeatS TRUE field SFBool repeatT TRUE } url - url
мастонахождение файла текстуры (JPEG, PNG, GIF) repeatS repeatT -
повторять или нет тектуру в интервале 0-1
TextureTransform - расположение
текстуры TextureTransform { exposedField SFVec2f
center 0 0 exposedField SFFloat rotation 0 exposedField SFVec2f scale 1 1 exposedField SFVec2f translation 0 0 } center
центр вокруг которого выполняется вращение текстуры (поле rotation)
rotation вращение текстуры в радианах scale
масштабирование текстуры по оси S и T translation расположение
координаты 0 0 текстуры на поверхности на которую наложена текстура