Узлы 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 поддерживает два типа полей:
- поля, принимающие единственное значение
- поля, которые могут иметь множество значений
Мы будем их называть однозначными
и многозначными полями.
Однозначное поле может содержать число, вектор или образ.
Однозначное поле всегда имеет имя, начинающееся с букв SF. В описании узлов,
представленных в этом тексте, вы найдете имена полей слева от их значений по
умолчанию.
Многозначные поля содержат последовательности значений,
разделенных запятыми. Если поле содержит более одного значения, то
последовательность значений, разделенных точками, должна обязательно помещаться
в квадратные скобки. Запятую после последнего значения можно ставить, а можно
опускать. Многозначные поля имеют имена, которые всегда начинаются с букв MF.
Детальное обсуждение однозначных и многозначных полей можно найти в разделе
"Поля VRML".
Поскольку узлы VRML - это единственные объекты, которые
содержат граф сцены, необходимо познакомиться с ними как можно лучше ;-). Это
позволит правильно использовать узлы для каждой ситуации. Каждый из 36 узлов
подробно описан ниже.
Документы 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 и соответствует естественной ширине
строки. Броузер переносит текст, используя текущие преобразования с накоплением,
и принимает текущее значение материала и текстуры.
Документы 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. Если вы взглянете на основание
конуса, то увидите, что броузер просто вырезает круг текстуры и накладывает его
туда.
Используется для того, чтобы определить множество
трехмерных координат, которые могут быть использованны графом сцены для узлов
IndexedFaceSet, IndexedLineSet, PointSet.
Следующий код иллюстрирует имена полей и их значения по
умолчанию для узла Coordinate3:
Coordinate3 {
point 0 0 0 # MFVec3f
}
Поле point
служит для представления трехмерных координат.
Используется для представления трехмерного куба.
Следующий код иллюстрирует имена полей и их значения по умолчанию для узла
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 {
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. Если вы смотрите вверх и видите дно цилиндра, то броузер вырезает
круг текстуры и накладывает его на основание цилиндра.
Используется для того, чтобы определить источники
направленного света, которые освещают объекты лучами, идущими параллельно
заданному трехмерному вектору на сцене графа 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
определяет источник освещения, который может
воздействовать на соответствующий узел простой геометрии графа сцены в
соответствии с текущим стилем освещения. Броузер применяет текущее
преобразование к источнику направленного освещения. Используя сепаратор, можно
отключить действие узла на объекты, которые находятся вне сферы
сепаратора.
Используется для того, чтобы определить текущий стиль
шрифтов, который будет использован узлами
AsciiText. Броузер в свою очередь
определяет спецификации шрифтов (исходные коды VRML не
имеют элементов прямого управления атрибутами шрифтов). Пример синтаксиса
ниже:
FontStyle {
family SERIF # SFEnum
size 10 # SFFloat
style NONE # SFBitMask
}
Поле family
указывает на семейство шрифтов, такое как SERIF, SANS или
TYPEWRITER. Поле size определяет
высоту шрифта. Поле style служит для
задания жирного шрифта или курсива. Оно может принимать значения соответственно
NONE, BOLD, ITALIC.
Используется для того, чтобы определить базовый класс
для целой группы узлов. Пример ниже ( данный узел не имеет полей ):
Group {
# Child nodes defined here
}
Узел Group
определяет узел-контейнер, который содержит упорядоченный
список узлов-потомков. Узел Group не
изменяет порядок обхода ( логику обработки броузером узлов и порядок, в котором
броузер их прорисовывает ). Как уже было кратко обсуждено ранее,
VRML передает текущее состояние ( цвета, текстуры,
трансформации и д.д.) каждому последующему узлу-потомку. Узел
Group не сохраняет и не
восстанавливает порядок обхода, в противоположность методу, используемому узлом
Separator, который сохраняет и
восстанавливает состояние.
Используется для представления трехмерных фигур,
используя многоугольники с вершинами, расположенными в текущих координатах. Ниже
приведен пример:
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 и отношением второго
по длине размера прямоугольника к его самому длинному размеру.
Документы 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 {
string "<Undefined info>" # SFString
}
Документы VRML используют узел LOD ( Level of Detail -
уровень детализации ) для того, чтобы позволить броузеру автоматически
переключаться между различными представлениями объектов вашего графа сцены.
Таким способом броузер может входить или выходить из образа, основываясь на
расстояниях, определенными пользователем от объекта к объекту. Ниже пример
синтаксиса:
LOD {
center 0 0 0 # SFVec3f
range [ ] # MFFloat
}
Поле center
определяет центр группы объектов LOD. Броузер применяет
текущее преобразование к центру объекта. Поле range
определяет массив значений, которые соответствуют
расстояниям от пользователя до центра группы объектов в узле LOD. Броузер
сравнивает текущее расстояние до первого значения в массиве
range. Если расстояние меньше, чем
первое значение массива, броузер прорисовывает первого потомка группы LOD. Если
расстояние больше, чем первое значение массива, но меньше, чем второе значение,
то броузер прорисовывает второго потомка группы LOD и т.д.
Используется для того, чтобы определить свойства
материала поверхностей текущей формы и форм, которые она содержит. Используя
этот узел с узлом 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, обсуждаемый
ниже.
Документы 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 определяет, каким
способом броузер применяет, т.е. связывает материалы в пределах формы. Когда
броузер должен связать набор материалов с объектом, он циклически просматривает
значения материалов от начала до конца.
Используется для того, чтобы определить матрицу
трехмерных геометрических преобразований. Трехмерные преобразования требуют
матрицы размером 4х4. Ниже приведен пример использования:
MatrixTransform {
matrix 1 0 0 0 # SFMatrix
0 1 0 0
0 0 1 0
0 0 0 1
}
Используется для того, чтобы определить множество
нормальных векторов к поверхностям в трехмерном пространстве. Эти векторы
используются узлами, которые следуют в иерархии объектов после узла
Normal и основываются на
использовании вершин. Другими словами, используя узел
Normal, можно определить трехмерный
нормальный вектор. Ниже синтаксис:
Normal {
vector 0 0 1 # MFVec3f
}
Используется для того, чтобы определить, как броузер
связывает текущие нормали с формами. Синтаксис ниже:
NormalBinding {
value DEFAULT # SFEnum
}
Значение поля value
определяет, как броузер связывает нормали с объектами
сцены. Броузер может интерпретировать связывание различным образом для различных
форм. Следующий список описывает значения для поля
value:
- DEFAULT - броузер использует связывание по умолчанию
- OVERALL - броузер использует связывание по умолчанию к целому
объекту
- PER_FACE - броузер использует указанную нормаль к каждой грани
объекта
- PER_FACE_INDEXED - Броузер использует указанную нормаль к каждой
грани объекта, основываясь на значениях индекса материала
- PER_PART - броузер использует указанную нормаль для каждой части
объекта
- PER_PART_INDEXED - броузер использует указанную нормаль для каждой
части объекта, основываясь на значениях индекса материалов
- PER_VERTEX - броузер использует указанную нормаль для каждой
вершины объекта
- PER_VERTEX_INDEXED - броузер использует указанную нормаль для
каждой вершины объекта, основываясь на значениях индекса материалов
Используется для того, чтобы определить параллельное
проектирование из точки обзора. Как вы, вероятно, знаете, используя камеры,
дизайнеры могут управлять углом или перспективой, в которой пользователь видит
сцену 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 в графе
сцены.
Используется для того, чтобы определить перспектиное
проектирование образов из точки наблюдения. Как вы, возможно, знаете, используя
камеры, дизайнеры могут контролировать угол или перспективу, под которыми
пользователь видит сцену 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 {
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 {
numPoints -1 # SFLong
startIndex 0 # SFLong
}
Поле numpoints
определяет число точек в множестве, которые броузер
прорисовывает. Значение, равное -1 для поля numPoints
указывает, что броузер должен использовать все остающиеся
значения текущих координат как точки. Поле startIndex
определяет индекс, соответствующий начальной точке.
Броузер применяет технику преобразования к координатам точек. Кроме того,
броузер изображает точки, используя текущие материал и текстуру.
Используется для того, чтобы задать трехмерное
вращение. Ниже пример кода:
Rotation {
rotation 0 0 1 0 # SFRotation
}
Первые три значения поля rotation
отвечают относительному вращению вокруг осей x,y,z.
Четвертая координата задает угол вращения в радианах. Броузер применяет текущее
преобразование к узлу Rotation.
Используется для того, чтобы определить трехмерное
маштабирование относительно начала координат. Используя узел
Scale, дизайнеры увеличивают или
уменьшают размеры объекта относительно осей. Масштабирование не обязано быть
одним и тем же для разных осей. Пример кода:
Scale {
scaleFactor 1 1 1 # SFVec3f
}
Поле scaleFactor
определяет множитель масштабирования по каждой из
координат.
Используется для того, чтобы изолировать узлы-потомки
сепаратора от остального графа сцены. Узел выполняет сохранение порядка обхода,
т.е. последовательности, в которой броузер обрабатывает узлы и прорисовывает их
на экране, перед тем как обрабатывать узлы-потомки. После того как обработаны
узлы-потомки, узел восстанавливает состояние. Примет кода:
Separator {
renderCulling AUTO # SFEnum
}
Поле renderCulling
устанавливает состояние отбраковки в рамках графа сцены.
Отбраковка представляет собой процесс удаления данных из графической обработки
на основе тестов, позволяющих изолировать объекты, невидимые в конечно
сцене.
Узел может включать освещенность, камеры, координаты,
нормали, связывания и другие свойства узлов. Узлы-сепараторы могут также
выполнять отбраковку для рендеринга, при котором броузер автоматически обходит
узлы-потомки, если эти узлы не должны быть прорисованы.
Определение того, должен ли узел-потомок быть
прорисован или нет, основанно на сравнение ограничивающего прямоугольника
узла-сепаратора с текущим размером видимого пространства. В случае, когда поле
renderCulling установленно в AUTO (
по умолчанию ), конкретная реализация языка VRML решает, производить отбраковку
или нет. Когда это поле установленно в положении OFF, отбраковка не выполняется,
но если его значение равно ON, то броузер всегда будет пытаться выполнить
отбраковку.
Используется для того, чтобы определить являются ли
значения 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 {
radius 1 # SFFloat
}
Поле radius
определяет размер и объем сферы. По умолчанию сфера имеет
своим центром начало координат. Броузер применяет текущее преобразование к узлу
Sphere и использует текущие материал
и текстуру.
Сфера не имеет граней или частей. Поэтому узлы
Sphere игнорируют связывание
материала и нормалей, используя первый материал для покрытия сферы целиком и
собственные нормали сферы. Когда броузер применяет текстуру к этому узлу,
текстура покрывает целиком всю поверхность сферы, наматываясь вокруг сферы
сначала на обратной стороне сферы. Текстура имеет шов на обратной стороне
сферы.
Используется для направленной подсветки объектов. Узел
определяет направленный источник освещения, который может воздействовать на
формы в сцене графа в соответствии с текущим стилем освещения. Ниже пример
кода:
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.
Используется для того, чтобы включать и выключать
свойства. В зависимости от значения своего поля, группа, указанная в узле, ведет
себя в точности или сходно с поведением, задаваемым узлом
Group. Ниже приведен пример
кода:
Switch {
whichChild -1 # SFLong
}
Если поле whichChild
принимает значение -3, то узел ведет себя в точности так
же, как узел Group. Если значение
поля whichChild равно -1, то узел
направляет броузеру всех своих потомков. Значение
whichChild указывает потомка, к
которому узел адресует броузер. Первый потомок имеет значение индекса, равное
0.
Используется для того, чтобы определить отображение
текстуры и параметры этого изображения. В свою очередь броузер применяет
текстуру для рендеринга форм. Ниже пример кода:
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
задает вращение вокруг той же самой точки. Вместе эти поля
определяют двумерное преобразование, которое броузер применяет к
текстурам.
Используется для того, чтобы определить набор двумерных
координат, которые броузер использует для того, чтобы отобразить текстуры на
вершины объектов PointSet, IndexedLineSet, IndexedFaceSet.
Используя рассматриваемый узел, документы VRML заменяют
текущие координаты текстуры. Ниже пример кода:
TextureCoordinate2 {
point 0 0 # MFVec2f
}
Поле point
задает отображение пар координат ( состоящих из двух чисел
в диапазоне от 0 до 1 ), которые устанавливают соответствие специфических точек
и текстуры на соответствующем индексном множестве. Величина 0 служит началом
отсчета на оси, а величина 1 есть наиболее удаленная точка текстуры вдоль оси.
Сначала задают горизонтальную координату, а затем вертикальную.
Используется для того, чтобы определить геометрическое
трехмерное преобразование, состоящее из неоднородного масштабирования
относительно произвольной точки, вращения относительно произвольной точки и оси,
а также переноса. Ниже пример кода:
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.
Используется таким же образом, как и узел
Separation. Оба узла сохраняют
состояние сцены перед переходом к узлам-потомкам. Аналогично оба узла
восстанавливают состояние сцены после окончания обработки узлов-потомков. Но
рассматриваемый узел сохраняте только текущее преобразование, все остальные
параметры состояния остаются несохраненными. Ниже пример кода:
TransformSeparator {
# Other nodes here
}
Документы VRML используют этот узел для
позиционирования камеры, поскольку преобразование относительно камеры не
воздействует на остальную сцену. Кроме того, документы VRML используют этот
узел, чтобы изолировать преобразования относительно источников света и других
объектов.
Используется для того, чтобы выполнить параллельный
перенос объекта на заданный трехмерный вектор. Иными словами, узел определяет
расстояние, на которое броузер сдвигает объект по осям. Ниже пример
кода:
Translation {
translation 0 0 0 # SFVec3f
}
Поле translation
определяет трехмерный вектор, на который осуществляется
параллельный перенос.
Используется для того, чтобы загрузить новую сцену в
броузер 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 {
bboxCenter 0 0 0 # SFVec3f
bboxSize 0 0 0 # SFVec3f
name "" # SFString
}
Поля bboxCenter
и bboxSize
определяют ограницивающий прямоугольник, если вставляемый
объект является узлом типа Shape.
Поле name
определяет URL, который соответствует файлу
узла-потомка.
|