On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Перевод документации по VRML 2.0.

Жирным черным шрифтом обозначаются заголовки или важние замечания

   Файл в формате 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. Служат для описания геометрических или физичесикх свойств объектов.
Геометрические ноды

Box, Cone, Cylinder, ElevationGrid, Extrusion, IndexedFaceSet, IndexedLineSet, PointSet, Sphere, Text содержат математичесикое представление трехмерных точек , линий, поверхностей, текстовых строк .

Ноды определяющие свойства геометрических нод

Color, Coordinate, Normal, TextureCoordinate.

Ноды определяющие геометрические сенсоры

ProximitySensor, VisibilitySensor, TouchSensor, CylinderSensor, PlaneSensor, SphereSensor. Генерируют события согласно действиям пользователя, такие как двежения миши или перемещение в виртуальном пространстве

Группирующие ноды

Anchor, Billboard, Collision, Group, Transform.  Группируют подчиненые (child) ноды или другие группы нод. Позволяют производить над группами различные действия.

Внешний вид

Appearance, FontStyle, ImageTexture, Material, MovieTexture, PixelTexture,TextureTransform

Прочие ноды

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 MFVec3f point  []
    }
    Определяет набор трех-мерных координат для использования в поле 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 текстуры на поверхности на которую наложена текстура



    Литература по VRML