Птсьмо вебмастеру На сайт вебмастера Выход
3D World
Информация
Учебник
Узлы VRML
Модели
Софт
На главную


 

Узлы VRML 1.0

VRML опрделеляет несколько различных классов узлов. Большая их часть может быть классифицирована в рамках следующих четырех категорий:

  • узлы простой геометрии ( Simple Geometry Nodes )
  • узлы свойств ( Property Nodes )
  • групповые узлы ( Group Nodes )
  • VRML-узлы ( Web Nodes )

Узлы простой геометрии ( формы ) определяют геометрию вашего графа сцены. Согласно общей концепции, именно эти узлы и предназначены для рисования. Property Nodes воздействуют на способ, которым броузер воспроизводит узлы простой геометрии. Свойства определяют материалы фигур, их текстуру, освещенность и т.д. Однако Property Nodes не могут создавать образов сами по себе. Group Nodes группируют другие узлы в коллекции узлов, так что в документе с ними можно обращаться как с одним общим объектом. Web Nodes помогают серверу найти узлы-потомки повсюду на Web.

Как известно, узлы VRML могут не содержать полей или содержать несколько полей. Каждый из типов узлов определяет тип, имя и значение по умолчанию для каждого из своих полей. Если при декларации узла значение поля оказывается незаданным, тогда VRML использует его значение по умолчанию. В пределах узла можно раполагать поля в произвольном порядке. Например, следующие декларации узлов являются идентичными:

Cube { height 4
depth 6
width 2
}
Cube {
depth 6
width 2
height 4
}

Далее в VRML-документе можно сгруппировать узлы свойств ( Property Nodes ), как свойства ( поля ) узла простой геометрии ( Simple Geometry Nodes ). Она окажут воздействие на освещение объекта, его преобразование и т.д.

Как вы узнаете дальше, групповвые узлы ( Group Nodes ) позволяют группировать узлы, используя механизм наследования, разделять узлы, временно отключая механизм наследования, определять, какие узлы-потомки получают информацию о состоянии узла, наследуя все свойства, за исключением свойств трансформации, или подключаться к объектам где угодно в Web. Необходимо понимать, что только групповые узлы могут иметь узлы-потомки.

Поля VRML

Рассматривая описания узлов VRML в следующих секциях, вы заметите комментарии справа от имени и значения по умолчанию для каждого поля. VRML поддерживает два типа полей:

  • поля, принимающие единственное значение
  • поля, которые могут иметь множество значений

Мы будем их называть однозначными и многозначными полями. Однозначное поле может содержать число, вектор или образ. Однозначное поле всегда имеет имя, начинающееся с букв SF. В описании узлов, представленных в этом тексте, вы найдете имена полей слева от их значений по умолчанию.

Многозначные поля содержат последовательности значений, разделенных запятыми. Если поле содержит более одного значения, то последовательность значений, разделенных точками, должна обязательно помещаться в квадратные скобки. Запятую после последнего значения можно ставить, а можно опускать. Многозначные поля имеют имена, которые всегда начинаются с букв MF. Детальное обсуждение однозначных и многозначных полей можно найти в разделе "Поля VRML".

Подробнее об узлах VRML

Поскольку узлы VRML - это единственные объекты, которые содержат граф сцены, необходимо познакомиться с ними как можно лучше ;-). Это позволит правильно использовать узлы для каждой ситуации. Каждый из 36 узлов подробно описан ниже.

Узел AsciiText

Документы VRML используют узел AsciiText для представления трехмерного текста в графе сцены VRML. Символы, которые броузер может вывести на экран, определены набором символов ASCII. Нижеследующий код иллюстрирует имена полей и их значения по умолчанию для узла AsciiText.

AsciiText { jusrification LEFT # SFEnum
spacing 1 # SFFloat
string "" # MFString
width 0 # MFFloat
}

Для вывода на экран броузером вы присваиваете символы полю string. Первая строка, которую вы выведете на экран, будет расположена в точке с координатами ( 0,0,0 ). Последующие строки будут смещаться вперед вдоль оси Y в соответствии с формулой: -1*(size*spacing). Вы задаете значение size. используя узел FontStyle. Поле spacing определяет вертикальное расстояние между строками. Поле justifcation ( выравнивание ) поддерживает значения: LEFT ( по умолчанию ), CENTER и RIGHT. Установка LEFT помещает левый край строки в положение с координатой х=0. Выравнивание CENTER соответствует размещению центра строки в позицию с координатой х=0. Соответсвенно выравнивание RIGHT помещает правый край строки в позицию х=0. Броузер перемещает строки справа налево, сверху вниз, используя спецификации, заданные в узле FontStyle. Поле width задает ограничения на ширину каждого поля. Значение по умолчанию равно 0 и соответствует естественной ширине строки. Броузер переносит текст, используя текущие преобразования с накоплением, и принимает текущее значение материала и текстуры.

Узел Cone

Документы VRML используют узел Cone для того, чтобы изображать трехмерные конусы в графе сцены VRML. Следующий код иллюстрирует имена полей и их значения по умолчанию для узла Cone:

Cone { bottomRadius 1 # SFFloat
height 2 # SFFloat
parts ALL # SFBitMask
}

Поле parts ( части ) задает части конуса и может принимать значение SIDES, BOTTOM, ALL. Значение SIDES описывает коническую часть конуса. Значение BOTTOM описывает нижнюю круговую поверхность конуса, и ALL отвечает всему конусу целиком. Поля bottomRadius и height определяют размеры конуса.

Разработчики используют узел Cone для представления простого конуса с центральной осью, направленной вдоль оси Y. По умолчанию броузер центрирует конус в координатах x-y-z в точке ( 0,0,0 ) и использует в качестве базы значения от -1 до +1 во всех трех направлениях. Каждый конус имеет две части: стороны и основания. Броузер преобразует, т.е. двигает конус в соответствии с текущим преобразованием с накоплением и использует текущие материал и текстуру.

Если документ VRML определяет текстуру конуса, то броузер использует эту текстуру для сторон конуса и для основания разным образом. Текстура оборачивается вокруг сторон конуса по направлению против часовой стрелки, начиная с обратной стороны конуса, и имеет вертикальный шов на обратной стороне конуса, пересекающий плоскость y-z. Если вы взглянете на основание конуса, то увидите, что броузер просто вырезает круг текстуры и накладывает его туда.

Узел Coordinate3

Используется для того, чтобы определить множество трехмерных координат, которые могут быть использованны графом сцены для узлов IndexedFaceSet, IndexedLineSet, PointSet. Следующий код иллюстрирует имена полей и их значения по умолчанию для узла Coordinate3:

Coordinate3 { point 0 0 0 # MFVec3f
}

Поле point служит для представления трехмерных координат.

Узел Cube

Используется для представления трехмерного куба. Следующий код иллюстрирует имена полей и их значения по умолчанию для узла Cube:

Cube { depth 2 # SFFloat
height 2 # SFFloat
width 2 # SFFloat
}

Поля width, height depth описывают ширину, высоту и глубину куба, измеряемые от его центра. Наименование куб не является технически корректным, поскольку значения полей height, width, depth могут быть различными.

По умолчанию броузер центрирует куб в начале координат ( 0,0,0 ) с размерами две единицы по каждому из направлений, т.е. в пределах от -1 до +1. Броузер преобразует, двигает куб, используя текущее преобразование графа сцены, материал и текстуру.

Когда вы определите узел Cube, можно использовать текстуру для его различных граней. Броузер наложит текстуру на соответствующую часть куба. Броузер присоеденит текстуру к фронтальной, задней, правой, левой сторонам куба. Броузер наложит текстуру на верхнюю часть куба, если она видна пользователю ( с точки зрения камеры ), или на нижнюю часть, если она видна.

Узел Cylinder

Используется для представления трехмерных цилиндров. Ниже приведен пример именования полей и их значений по умолчанию для узла Cylinder:

Cylinder { height 2 # SFFloat
parts ALL # SFBitMask
radius 1 # SFFloat
}

Поля radius, height определяют радиус и высоту цилиндра. Поле parts описывает части цилиндра может принимать значения SIDES, BOTTOM, TOP, ALL. Значение SIDES описывает стороны цилиндра, значение TOP - верхнюю круговую поверхность цилиндра. Значение BOTTOM описывает нижнюю круговую поверхность цилиндра. Значение ALL описывает все части цилиндра.

Узел Cylinder создает простой цилиндр, центрированный вокруг оси Y. По умолчанию броузер центрирует цилиндр в точке с координатами ( 0,0,0 ), а размеры цилиндра равны двум по каждой из трех координат, изменясь от -1 до +1. Цилиндр имеет три части: стороны цилиндра, верхнюю часть цилиндра, где у=-1. Изменяя значение полей radius и hieght, вы можете изменить размеры цилиндра.

Броузер преобразует ( двигает ) цилиндр, используя текущие преобразования, материал и текстуру. Если документ VRML снабжает цилиндр текстурой, то броузер наложит текстуру на цилиндрическую поверхность и основание цилиндра различным образом. На цилиндрическую поверхность текстура наматывается против часовой стрелки, начиная с обратной стороны цилиндра, который пересекает плоскость y-z. Если вы смотрите вверх и видите дно цилиндра, то броузер вырезает круг текстуры и накладывает его на основание цилиндра.

Узел DirectionalLight

Используется для того, чтобы определить источники направленного света, которые освещают объекты лучами, идущими параллельно заданному трехмерному вектору на сцене графа VRML. Пример именования полей и их значения приведен ниже:

DirectionalLight { color 1 1 1 # SFColor
direction 0 0 -1 # SFVec3f
intensity 1 # SFFloat
on TRUE # SFBool
}

Поле color определяет цветовые компоненты: красный, зеленый и синий. Величины значений поля изменяются в пределах от 0.0 до 1.0. Например, если значением поля служат величины 1 0 0, то цвет оказывается чисто красным. Аналогично, значение поля равное 0 1 0, отвечает зеленому цвету. Поле direction описывает трехмерный вектор, который задает направление света. Направление световых лучей оказывается параллельным трехмерному вектору, определенному полем direction. Значение поля intensity (интенсивность) изменяется в пределах от 0.0 до 1.0, причем значение 1.0 соответствует наивысшей интенсивности. Поле on включает направленный источник света, когда поле принимает значение TRUE и выключает его, когда значение - FALSE.

Узел DirectionalLight определяет источник освещения, который может воздействовать на соответствующий узел простой геометрии графа сцены в соответствии с текущим стилем освещения. Броузер применяет текущее преобразование к источнику направленного освещения. Используя сепаратор, можно отключить действие узла на объекты, которые находятся вне сферы сепаратора.

Узел FontStyle

Используется для того, чтобы определить текущий стиль шрифтов, который будет использован узлами AsciiText. Броузер в свою очередь определяет спецификации шрифтов (исходные коды VRML не имеют элементов прямого управления атрибутами шрифтов). Пример синтаксиса ниже:

FontStyle { family SERIF # SFEnum
size 10 # SFFloat
style NONE # SFBitMask
}

Поле family указывает на семейство шрифтов, такое как SERIF, SANS или TYPEWRITER. Поле size определяет высоту шрифта. Поле style служит для задания жирного шрифта или курсива. Оно может принимать значения соответственно NONE, BOLD, ITALIC.

Узел Group

Используется для того, чтобы определить базовый класс для целой группы узлов. Пример ниже ( данный узел не имеет полей ):

Group { # Child nodes defined here
}

Узел Group определяет узел-контейнер, который содержит упорядоченный список узлов-потомков. Узел Group не изменяет порядок обхода ( логику обработки броузером узлов и порядок, в котором броузер их прорисовывает ). Как уже было кратко обсуждено ранее, VRML передает текущее состояние ( цвета, текстуры, трансформации и д.д.) каждому последующему узлу-потомку. Узел Group не сохраняет и не восстанавливает порядок обхода, в противоположность методу, используемому узлом Separator, который сохраняет и восстанавливает состояние.

Узел IndexedFaceSet

Используется для представления трехмерных фигур, используя многоугольники с вершинами, расположенными в текущих координатах. Ниже приведен пример:

IndexedFaceSet { coordIndex 0 # MFLong
materialIndex -1 # MFLong
normalIndex -1 # MFLong
textureCoordIndex -1 # MFLong
}

Поле coordIndex определяет координаты граней многогранников, причем значение индекса начинается с 0. Неотрицательные значения индекса отвечают трехмерной точке ( х, у, z ). По определению многогранник должен иметь три или более линии, ограничивающие каждую грань. Поэтому необходимо определить как минимум три координатных индекса ( координаты трех точек в пространстве ) для каждой грани многогранника. Величина, равная -1 в поле coordIndex, указывает на конец текущей грани. Если многогранник содержит боле одной грани, необходимо отделять каждую грань от следующей значением -1. После последней грани многогранника также необходимо поставить значение -1. Поле materilIndex определяет индекс материалов, который будет использоваться броузером для каждой вершины многогранника. Поле normalIndex определяет индексы нормалей, которые броузер использует для узлов простой геометрии. с их помощью вычисляется эффект света от поверхностей. Поле textureCoordIndex определяет индексы текстур, которые броузер свяжет с заданными координатами.

Документы VRML используют индексы IndexedFaceSet в рамках поля coordinateIndex для того, чтобы определить грани многогранника. Броузер преобразует вершины многогранника, используя текущего преобразования.

Если привязка координат текстуры имеет тип PER_VERTEX, то можно связывать явные координаты текстуры ( определенные узлом textureCoordinate2 ) с вершинами группы узлов простой геометрии, одна после другой. Однако если привязка определена как PER_VERTEX_INDEXED, тогда можно связывать координаты текстуры с вершинами многогранника, используя индексы, которые вы указали в поле textureCoordIndex.

Для всех узлов простой геометрии, основанных на описании вершин, справедливо следующее. Если вы определяете текущую текстуру, но не указываете координат текстуры, броузер применяет задаваемое по умолчанию отображение координат текстуры, используя ограничивающий прямоугольник. Размеры этого ограничивающего прямоугольника заданы в терминах S и T. Наибольший размер этого прямоугольника определяет S-координаты, а следующий по длине размер прямоугольника определяет T-оординаты. S-координаты изменяются в пределах от 0 до 1, пробегая значения от одного конца прямоугольника до другого. Область значений Т-координат начинается с числа, лежащего между 0 и отношением второго по длине размера прямоугольника к его самому длинному размеру.

Узел IndexedLineSet

Документы VRML используют этот узел для того, чтобы представлять трехмерные формы путем построения полилиний ( polylilines ) т.е. формировать "проволочные" многогранники, используя вершины, расположенные в текущих координатах. Другими словами, полилинии показывают грани, которые не являются сплошными. Ниже приведенный пример показывает это:

IndexedLineSet { coordIndex 0 # MFLong
materialIndex -1 # MFLong
normalIndex -1 # MFLong
textureCoordIndex -1 # MFLong
}

Поле coordIndex определяет координаты вершин узлов полилиний, где значение индекса начинается с 0. Неотрицательные значения индекса соответствуют трехмерным точкам ( x, y, z ). Поскольку полилиния является фомой многогранника, она должна по определению иметь три или более линии, которые ограничивают воображаемую грань. Необходимо определить как минимум три координатных индекса, т.е. три трехмерных точки для каждой грани полилинии. Значение индекса, равное -1 в поле coordIndex, указывает на конец текущей грани. Если многоугольник имеет более одной грани, то каждая из них отделена от другой величиной -1. После последней грани также должно идти значение -1.

Поле materilIndex определяет индекс материалов, который броузер будет использовать для каждой вершины полилинии. Поле normalIndex определяет индексы нормалей, которые броузер использует для вершин, входящих в состав кдасса узлов простой геометрии. Поле textureCoordIndex определяет индексы для каждой текстуры, которую броузер связывает с заданными координатами ( вершинами ).

Документы VRML используют индексы IndexedLineSet в поле CoordIndex для того, чтобы задать вершины полилинии. Броузер преобразует вершины, используя текущие преобразования.

Узел Info

Используется для того, чтобы определить информационный узел ( такой как сообщение о правах на копирование или об авторстве ) в графе сцены. Ниже приведен пример синтаксиса:

Info { string "<Undefined info>" # SFString
}

Узел LOD

Документы VRML используют узел LOD ( Level of Detail - уровень детализации ) для того, чтобы позволить броузеру автоматически переключаться между различными представлениями объектов вашего графа сцены. Таким способом броузер может входить или выходить из образа, основываясь на расстояниях, определенными пользователем от объекта к объекту. Ниже пример синтаксиса:

LOD { center 0 0 0 # SFVec3f
range [ ] # MFFloat
}

Поле center определяет центр группы объектов LOD. Броузер применяет текущее преобразование к центру объекта. Поле range определяет массив значений, которые соответствуют расстояниям от пользователя до центра группы объектов в узле LOD. Броузер сравнивает текущее расстояние до первого значения в массиве range. Если расстояние меньше, чем первое значение массива, броузер прорисовывает первого потомка группы LOD. Если расстояние больше, чем первое значение массива, но меньше, чем второе значение, то броузер прорисовывает второго потомка группы LOD и т.д.

Узел Material

Используется для того, чтобы определить свойства материала поверхностей текущей формы и форм, которые она содержит. Используя этот узел с узлом MaterialBinding ( который обсуждается дальше ), можно придать объектам сцены разлиный вид. Ниже пример синтаксиса:

Material { ambientColor 0.2 0.2 0.2 # MFColor
diffuseColor 0.8 0.8 0.8 # MFColor
emissiveColor 0 0 0 # MFColor
shininess 0.2 # MFFloat
specularColor 0 0 0 # MFColor
transparency 0 # MFFloat
}

Поля ambientColor, diffuseColor, specularColor, emissiveColor определяют смесь красного, зеленого и голубого цветов. Значения для красного, зеленого и голубого цветов изменяются в пределах от 0 до 1. Например, чтобы установить голубой цвет, вы устанавливаете значение поля равным 0 0 1. Аналогично, чтобы установить желтый цвет объекта, вы устанавливаете значения 1 1 0

( красный и зеленый, смешаваясь, дают желтый цвет ).

Поля shininess и transparensy изменяются в пределах от 0 до 1. Для того, чтобы объект выглядел очень ярким, установите поле shininess равным 1. Чтобы сделать объект прозрачным, установите значение поля transparensy равным 1.

Узел Material определяет то, как выглядит материал. Необходимо отметить, что различные формы интерпретируют материал по-разному. Для того, чтобы связать материалы с образами, формами, докуенты VRML используют узел MaterialBinding, обсуждаемый ниже.

Узел MaterialBinding

Документы VRML используют этот узел для того, чтобы определить, каким образом именно броузер должен связать текущие материалы с формамив рамках графа сцены. Ниже есть пример:

MaterailBinding { value DEFAULT # SFEnum
}

Поле value описывает, как узел MaterialBinding связывает материал с объектом, его частями, гранями, вершинами. Следующий список служит описанием значений этого поля:

  • DEFAULT - броузер использует связывание по умолчанию
  • OVERALL - броузер использует то самое связывание ко всему объекту
  • PER_FACE - броузер использует указанный материал к каждой грани объекта
  • PER_FACE_INDEXED - броузер использует указанный материал к каждой грани объекта, основываясь на значениях индекса материала
  • PER_PART - броузер использует указанный материал к каждой части объекта
  • PER_PART_INDEXED - броузер использует указанный материал к каждой части объекта, основываясь на значениях индекса материала
  • PER_VERTEX - броузер использует указанный материал для каждой вершины объекта
  • PER_VERTEX_INDEXED - броузер использует указанный материал для каждой вершины объекта, основываясь на индексе материала

Заметьте, что броузер может интерпретировать связывание материала для каждого узла, для каждой вершины, формы различным образом. Текущий материал всегда имеет базовое значение, которое определено первым значением всех полей материалов. Поскольку поля материалов могут иметь различные значения, узел MaterialBinding определяет, каким способом броузер применяет, т.е. связывает материалы в пределах формы. Когда броузер должен связать набор материалов с объектом, он циклически просматривает значения материалов от начала до конца.

Узел MatrixTransform

Используется для того, чтобы определить матрицу трехмерных геометрических преобразований. Трехмерные преобразования требуют матрицы размером 4х4. Ниже приведен пример использования:

MatrixTransform { matrix 1 0 0 0 # SFMatrix
0 1 0 0
0 0 1 0
0 0 0 1
}

Узел Normal

Используется для того, чтобы определить множество нормальных векторов к поверхностям в трехмерном пространстве. Эти векторы используются узлами, которые следуют в иерархии объектов после узла Normal и основываются на использовании вершин. Другими словами, используя узел Normal, можно определить трехмерный нормальный вектор. Ниже синтаксис:

Normal { vector 0 0 1 # MFVec3f
}

Узел NormalBinding

Используется для того, чтобы определить, как броузер связывает текущие нормали с формами. Синтаксис ниже:

NormalBinding { value DEFAULT # SFEnum
}

Значение поля value определяет, как броузер связывает нормали с объектами сцены. Броузер может интерпретировать связывание различным образом для различных форм. Следующий список описывает значения для поля value:

  • DEFAULT - броузер использует связывание по умолчанию
  • OVERALL - броузер использует связывание по умолчанию к целому объекту
  • PER_FACE - броузер использует указанную нормаль к каждой грани объекта
  • PER_FACE_INDEXED - Броузер использует указанную нормаль к каждой грани объекта, основываясь на значениях индекса материала
  • PER_PART - броузер использует указанную нормаль для каждой части объекта
  • PER_PART_INDEXED - броузер использует указанную нормаль для каждой части объекта, основываясь на значениях индекса материалов
  • PER_VERTEX - броузер использует указанную нормаль для каждой вершины объекта
  • PER_VERTEX_INDEXED - броузер использует указанную нормаль для каждой вершины объекта, основываясь на значениях индекса материалов

Узел OrthographicCamera

Используется для того, чтобы определить параллельное проектирование из точки обзора. Как вы, вероятно, знаете, используя камеры, дизайнеры могут управлять углом или перспективой, в которой пользователь видит сцену VRML. Ортографическая камера не уменьшает объектов в зависимости от расстояния, как это делает перспективная камера, которая обсуждается ниже. При проекектировании с ортографической камерой по мере удаления пользователя от сцены объект отступает на задний план, но не приближается к точке исчезновения ( vanishing point - точке в центре наблюдаемой области, где объекты сходятся и исчезают в перспективе ). Ниже приведен пример использования:

OrthographicCamera { focalDistance 5 # SFFloat
height 2 # SFFloat
orientation 0 0 1 0 # SFRotation
position 0 0 1 # SFVec3f
}

FocalDistance определяет расстояние от ортографической камеры до объектов. Поле height определяет общую высоту наблюдаемого объема ( прямоугольник, в рамках которого появляются объекты ). Поле position определяет координаты ортографической камеры x, y, z. Поле orientation вращает ортографическую камеру. По умолчанию ортографическая камера расположена в точке ( 0,0,1 ) и ваш взгляд направлен вдоль оси Z в монитор.

Броузер применяет текущее преобразование к ортографической камере. Камеру можно позиционировать, помещая узел Transform перед узлом OrthographicCamera в графе сцены.

Узел PerspectiveCamera

Используется для того, чтобы определить перспектиное проектирование образов из точки наблюдения. Как вы, возможно, знаете, используя камеры, дизайнеры могут контролировать угол или перспективу, под которыми пользователь видит сцену VRML. Перспективная камера уменьшает размеры объекта с увеличением расстояния до него в противоположность ортографической камере. при проектировании с перспективной камерой по мере удаления пользователя от сцены объекты приближаются к точке перспективы или точки исчезновения. Ниже пример использования узла:

PerspectiveCamera { focalDistance 5 # SFFloat
heightAngle 0.785398 # SFFloat
orientation 0 0 1 0 # SFRotation
position 0 0 1 # SFVec3f
}

focalDistance определяет расстояние от камеры до объекта. Поле heightAngle определяет общий вертикальный угол обозреваемого пространства. Это пространство ограниченно правильной пирамидой. Поле position определяет координаты камеры x,y,z. Поле orientation вращает камеру. По умолчанию камера расположена в точке с координатами ( 0,0,1 ) и ваш взгляд направлен вдоль оси Z на монитор.

Узел PointLight

Используется для того, чтобы поместить источник света в заданную точку трехмерного пространства. Точечный источник излучает одинаково по всем направлениям. Узел определяет источник света, который может воздействовать на следующие за ним формы в иерархии кдассов в графе сцены. Освещение зависит от текущего стиля освещения, который вы выбрали. Ниже пример использования:

PointLight { color 1 1 1 # SFColor
intensity 1 # SFFloat
location 0 0 1 # SFVec3f
on TRUE # SFBool
}

Поле color управляет цветом, задавая смесь красного, зеленого и голубого. Значение цвета изменятеся от 0 до 1 для каждого компонента. Поле location определяет положение источника света в пределах сцены. Поле intensity управляет интенсивностью источника света. Его значение изменятеся от 0 до 1, где 1 отвечает наивысшей интенсивностью. Поле on включает и выключает свет, где значение TRUE соответствует включенному, а FALSE - выключенному источнику. Броузер применяет текущее преобразование к источнику света. Узел PointLight, расположенный в рамках узла Separator, не влияет на какие-либо объекты вне узла Separator.

Узел PointSet

Используется для того, чтобы представить множество точек, расположенных в заданных координатах. Этот узел можно представить себе как массив величин. Ниже пример синтаксиса:

PointSet { numPoints -1 # SFLong
startIndex 0 # SFLong
}

Поле numpoints определяет число точек в множестве, которые броузер прорисовывает. Значение, равное -1 для поля numPoints указывает, что броузер должен использовать все остающиеся значения текущих координат как точки. Поле startIndex определяет индекс, соответствующий начальной точке. Броузер применяет технику преобразования к координатам точек. Кроме того, броузер изображает точки, используя текущие материал и текстуру.

Узел Rotation

Используется для того, чтобы задать трехмерное вращение. Ниже пример кода:

Rotation { rotation 0 0 1 0 # SFRotation
}

Первые три значения поля rotation отвечают относительному вращению вокруг осей x,y,z. Четвертая координата задает угол вращения в радианах. Броузер применяет текущее преобразование к узлу Rotation.

Узел Scale

Используется для того, чтобы определить трехмерное маштабирование относительно начала координат. Используя узел Scale, дизайнеры увеличивают или уменьшают размеры объекта относительно осей. Масштабирование не обязано быть одним и тем же для разных осей. Пример кода:

Scale { scaleFactor 1 1 1 # SFVec3f
}

Поле scaleFactor определяет множитель масштабирования по каждой из координат.

Узел Separator

Используется для того, чтобы изолировать узлы-потомки сепаратора от остального графа сцены. Узел выполняет сохранение порядка обхода, т.е. последовательности, в которой броузер обрабатывает узлы и прорисовывает их на экране, перед тем как обрабатывать узлы-потомки. После того как обработаны узлы-потомки, узел восстанавливает состояние. Примет кода:

Separator { renderCulling AUTO # SFEnum
}

Поле renderCulling устанавливает состояние отбраковки в рамках графа сцены. Отбраковка представляет собой процесс удаления данных из графической обработки на основе тестов, позволяющих изолировать объекты, невидимые в конечно сцене.

Узел может включать освещенность, камеры, координаты, нормали, связывания и другие свойства узлов. Узлы-сепараторы могут также выполнять отбраковку для рендеринга, при котором броузер автоматически обходит узлы-потомки, если эти узлы не должны быть прорисованы.

Определение того, должен ли узел-потомок быть прорисован или нет, основанно на сравнение ограничивающего прямоугольника узла-сепаратора с текущим размером видимого пространства. В случае, когда поле renderCulling установленно в AUTO ( по умолчанию ), конкретная реализация языка VRML решает, производить отбраковку или нет. Когда это поле установленно в положении OFF, отбраковка не выполняется, но если его значение равно ON, то броузер всегда будет пытаться выполнить отбраковку.

Узел ShapeHints

Используется для того, чтобы определить являются ли значения IndexedFaceSet отечающими жестким или выпуклым граням, содержат ли они упорядоченные вершины. Документы VRML используют этот узел, чтобы программы обработки VRML-документов могли оптимизировать процесс рендеринга. В такую оптимизацию входит исключение невидимых граней и устранение двустороннего освещения, эффект которого также не виден. Например, если объект сцены является жестким и имеет упорядоченные вершины, программа реализации VRML может включить процесс устранения обратных граней и выключения освещения обеих сторон грани. Следующий код иллюстрирует этот узел:

ShapeHints { creaseAngle 0.5 # SFFloat
faceType CONVEX # SFEnum
shapeType UNKNOWN_SHAPE_TYPE # SFEnum
vertexOrdering UNKNOWN_ORDERING # SFEnum
}

Поле creaseAngle устанавливает угол между нормалями на смежных гранях. Когда требуется IndexedFaceSet для формирования нормалей по умолчанию, используется поле creaseAngle, чтобы определить, какие края броузер должен плавно затенить, а какие края должны иметь отчетливые границы. Угол складки ( crease angle ) определяется как угол между двумя нормалями к поверхности на смежных гранях. Например, угол складкив 0.5 радиан ( значение по умолчанию ) указывает, что переход между двумя смежными полигональными гранями будет выглядеть плавным в случае, когда нормали к двум граням образуют угол, который меньше 0.5 радиан ( приближенно 30* ). В противном случае переход между этими двумя гранями будет резко обозначенным.

Поле fecaType указывает, являются ли все гряни форму выпуклыми ( значение CONVEX ), или же что документу неизвестно ничего о гранях ( значение UNKNOWN_SHAPE_TYPE ). Поле vertexOrdering позволяет указывать на упорядоченность вершин объектов. Оно может принимать значения UNKNOWN_ORDERING - упорядоченность неизвестна, CLOCKWISE - упорядоченность по часовой стрелке, или COUNTERCLOCKWISE - упорядоченность против часовой стрелки. Поле shapeType показывает, ограничивает ли форма объем ( значение SOLID ), или же тип фформы неизвестен ( значение NKNOWN_SHAPE_TYPE ).

Узел Sphere

Используется для представления сферы. Пример кода ниже:

Sphere { radius 1 # SFFloat
}

Поле radius определяет размер и объем сферы. По умолчанию сфера имеет своим центром начало координат. Броузер применяет текущее преобразование к узлу Sphere и использует текущие материал и текстуру.

Сфера не имеет граней или частей. Поэтому узлы Sphere игнорируют связывание материала и нормалей, используя первый материал для покрытия сферы целиком и собственные нормали сферы. Когда броузер применяет текстуру к этому узлу, текстура покрывает целиком всю поверхность сферы, наматываясь вокруг сферы сначала на обратной стороне сферы. Текстура имеет шов на обратной стороне сферы.

Узел SpotLight

Используется для направленной подсветки объектов. Узел определяет направленный источник освещения, который может воздействовать на формы в сцене графа в соответствии с текущим стилем освещения. Ниже пример кода:

SpotLight { color 1 1 1 # SFVec3f
cutOffAngle 0.785398 # SFFloat
direction 0 0 -1 # SFVec3f
dropOffRate 0 # SFFloat
intensity 1 # SFFloat
location 0 0 1 # SFVec3f
on TRUE # SFBool
}

Поле color определяет смесь цветов: красного, зеленого и голубого. Броузер направит лучи прожектора в конусе вокруг трехмерного ветора направления, заданного полем direction. Интенсивность света уменьшается экспоненциально по мере смещения лучей от центра конуса. Поле cutOffAngle контролирует угол конуса.

Поле location определяет координаты прожектора в рамках графа сцены. Поле dropOffRate задает, как быстро спадает освещенность по мере увеличения расстояния ( принимает значения от 0 до 1, где 0 соответствует наименьшему ослаблению с расстояния ).

И, наконец, поле on включает и выключает прожектор. Поле intensity управляет интенсивностью освещения. Его значение изменяется от 0 ( низкая интенсивность ) до 1 ( высокая интенсивность ). Броузер применяет текущее преобразование к узлу. Если узел расположен внутри узла Separator , то он влияет на объекты, расположенные вне узла Separator.

Узел Switch

Используется для того, чтобы включать и выключать свойства. В зависимости от значения своего поля, группа, указанная в узле, ведет себя в точности или сходно с поведением, задаваемым узлом Group. Ниже приведен пример кода:

Switch { whichChild -1 # SFLong
}

Если поле whichChild принимает значение -3, то узел ведет себя в точности так же, как узел Group. Если значение поля whichChild равно -1, то узел направляет броузеру всех своих потомков. Значение whichChild указывает потомка, к которому узел адресует броузер. Первый потомок имеет значение индекса, равное 0.

Узел Texture2

Используется для того, чтобы определить отображение текстуры и параметры этого изображения. В свою очередь броузер применяет текстуру для рендеринга форм. Ниже пример кода:

Texture2Transform { center 0 0 # SFVec3f
rotation 0 # SFFloat
scaleFactor 1 1 # SFVec3f
translation 0 0 # SFVec3f
}

Узел использует значения четырех полей для того, чтобы выполнить преобразования. Поле translation определяет неоднородное масштабирование относительно произвольной точки, взятой в качестве центра. Поле rotation задает вращение вокруг той же самой точки. Вместе эти поля определяют двумерное проебразование, которое броузер применяет к текстурам.

Узел Textture2Transform

Используется для того, чтобы определить двумерное преобразование, которое броузер применяет к координатам текстуры. Узел воздействует на способ, которым броузер накладывает текстуры на поверхность форм. Ниже следует пример кода:

Texture2Transform { center 0 0 # SFVec2f
rotation 0 # SFFloat
scaleFactor 1 1 # SFVec2f
translation 0 0 # SFVec2f
}

Узел использует значения четырех полей для того, чтобы выполнить преобразование. Поле translation определяет неоднородное масштабирование относительно произвольной точки, взятой в качестве центра. Поле rotation задает вращение вокруг той же самой точки. Вместе эти поля определяют двумерное преобразование, которое броузер применяет к текстурам.

Узел TextureCoordinate2

Используется для того, чтобы определить набор двумерных координат, которые броузер использует для того, чтобы отобразить текстуры на вершины объектов PointSet, IndexedLineSet, IndexedFaceSet. Используя рассматриваемый узел, документы VRML заменяют текущие координаты текстуры. Ниже пример кода:

TextureCoordinate2 { point 0 0 # MFVec2f
}

Поле point задает отображение пар координат ( состоящих из двух чисел в диапазоне от 0 до 1 ), которые устанавливают соответствие специфических точек и текстуры на соответствующем индексном множестве. Величина 0 служит началом отсчета на оси, а величина 1 есть наиболее удаленная точка текстуры вдоль оси. Сначала задают горизонтальную координату, а затем вертикальную.

Узел Transform

Используется для того, чтобы определить геометрическое трехмерное преобразование, состоящее из неоднородного масштабирования относительно произвольной точки, вращения относительно произвольной точки и оси, а также переноса. Ниже пример кода:

Transform { center 0 0 0 # SFVec3f
rotation 0 0 1 0 # SFRotation
scaleFactor 1 1 1 # SFVec3f
scaleOrientation 0 0 1 0 # SFRotation
translation 0 0 0 # SFVec3f
}

Поле center определяет начало отсчета для выполнения преобразования. Поле rotation определяет угол, на который броузер вращает объект - на манер, сходный с узлом Rotation. Поле scaleFactor определяет, как броузер изменяет размер объекта подобно тому, как это выполняется узлом Scale. Поле scaleOrientation определяет ориентацию для поля scaleFactor, что позволяет броузеру выполнить неоднородное масштабирование. Поле translation определяет, как броузер двигает объект. Рассматриваемый узел может содержать один или более следующих узлов: Rotation, Scale, Translation.

Узел TransformSeparator

Используется таким же образом, как и узел Separation. Оба узла сохраняют состояние сцены перед переходом к узлам-потомкам. Аналогично оба узла восстанавливают состояние сцены после окончания обработки узлов-потомков. Но рассматриваемый узел сохраняте только текущее преобразование, все остальные параметры состояния остаются несохраненными. Ниже пример кода:

TransformSeparator { # Other nodes here
}

Документы VRML используют этот узел для позиционирования камеры, поскольку преобразование относительно камеры не воздействует на остальную сцену. Кроме того, документы VRML используют этот узел, чтобы изолировать преобразования относительно источников света и других объектов.

Узел Translation

Используется для того, чтобы выполнить параллельный перенос объекта на заданный трехмерный вектор. Иными словами, узел определяет расстояние, на которое броузер сдвигает объект по осям. Ниже пример кода:

Translation { translation 0 0 0 # SFVec3f
}

Поле translation определяет трехмерный вектор, на который осуществляется параллельный перенос.

Узел WWWAnchor

Используется для того, чтобы загрузить новую сцену в броузер VRML, когда пользователь выбирает узел-потомок. Узел очень напоминает узел Separator в том отношении, что он сохраняет состояние перед обходом узлов-потомков и восстанавливает состояние по завершении этого действия. Ниже пример кода:

WWWAnchor { description "" # SFString
map NONE # SFEnum
name "" # SFString
}

Поле description определяет выражение, которое броузер может выводить на экран в своей строке name вместо URL. Поле map указывает, будет или нет броузер посылать координаты точки в пространстве объекта вместе с URL, когда пользователь выберет этот achor ( якорь ). Это поле может принимать значения NONE ( по умолчанию ) или POINT. Если поле map равно POINT, то координаты точки на объекте, которую выбрал пользователь, будут добавлены в URL в поле name в формате "? x, y, z". Поле name определяет локальный файл или файл на Web, который содаржит новую сцену.

Узел WWWInline

Используется для того, чтобы определить положение узла-потомка, который броузер может прочитать динамически. Ниже приведен пример кода:

WWWInline { bboxCenter 0 0 0 # SFVec3f
bboxSize 0 0 0 # SFVec3f
name "" # SFString
}

Поля bboxCenter и bboxSize определяют ограницивающий прямоугольник, если вставляемый объект является узлом типа Shape. Поле name определяет URL, который соответствует файлу узла-потомка.

Hosted by uCoz