| |||||||||||||||||
|
1.Общие сведения(структура программы,
простейший пример) Общие сведенияКаждый VRML объект описывается структурой, внешне очень напоминающей тип Struct в С++ или Record в Pascal. Для того, чтобы создать объект с необходимыми свойствами, нужно описать структуру, определяющую данный тип объектов, ставя в соответствие полям этой структуры нужные значения. Следует заметить, что если при описании объекта были заданы значения не для всех полей структуры, то для этих полей будут использоваться значения по умолчанию. Для работы с динамическими объектами применяется событийный подход. На самом простом уровне организация работы с такими объектами выглядит следующим образом:объекту, являющемуся источником события ставится в соответствие объект - приемник события. Структура VRML файлаВ общем, виде каждый VRML файл состоит из следующих частей: Заголовок #VRML V2.0 utf8 Эта строка является первой для любого файла, содержащего описание VRML объектов. Описание прототипов Эта часть является необязательной. В ней пользователь может описать свои собственные классы объектов для дальнейшего использования в программе. Это позволяет сократить исходные тексты. Следует заметить, что описанные прототипы могут являться комбинацией, как стандартных классов, так и описанных выше прототипов. Описания графа сцены В этой части описываются объекты, которые необходимы для построения для сцены (мира) задуманного пользователем. Описание путей трансляции сообщенийЭта часть является необязательной. Она необходима только в том случае,когда есть необходимость в создании динамических объектов (объектов, меняющих свои свойства с течением времени). Именно в этой части программы происходит связывание объектов - источников событий с объектами- приемниками событий. Простейшая VRML программа Данная программа строит шар зеленого цвета, с центром, находящимся в точке пространства с координатами (1,1,1). Радиус шара равен 3. Шар зеленого цвета. Примечание: файлы VRML имеют расширение *.wrl. #VRML V2.0 utf8 Transform { translation 1 1 1 children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Sphere { radius 3 } } ] }
- один из основных классов VRML. Этот класс является внешним контейнером, содержащем в себе некоторый объект (или группу объектов). Сам класс не имеет визуального отображения.Внутри этого класса имеется ряд полей данных. Одним из таких полей является translation, которому присваивается некоторое значение, являющееся точкой пространства. Это поле задает точку, в которую смещается начало координат для объекта (или группы объектов), описанного внутри этого класса. Это свойство распространяется ТОЛЬКО на объекты, принадлежащие данному классу Transform. Например, если у нас в некотором узле (в спецификации VRML термин "узел" - NODE является синонимом термина "объект" - OBJECT) полю translation присвоено значение (1,2,3), а дочерний (описанный внутри) объект (узел) имеет относительные координаты (0,1,1), то это означает, что дочерний объект в абсолютных координатах будет располагаться в точке (1,3,4). Примечание:
при описании сложных объектов,
являющихся композицией более простых
узлов, рекомендуется заключать сложные
объекты внутри узлов типа Transform. Это дает
возможность легко менять положение
объекта в пространстве путем изменения
значения только поля translation внутри узла
Transform, а не положения каждого
составляющего элемента сложного
объекта. -
поле данных класса Transform. Внутри него
описываются дочерние объекты (в данном
случае - один объект).
- класс описывающий заданную
поверхность с заданными визуальными
свойствами Примечание: язык VRML чувствителен к регистру. Названия полей всегда начинаются с маленькой буквы, а названия соответствующих им объектов - с большой. Appearance { } - класс, описывающий визуальные свойства поверхности. material - поле класса Appearance, содержащее информацию о материале, из которого сделана поверхность. Material { } - класс, описывающий свойства материала. diffuseColor - поле класса Material, задающее цвет материала по системе RGB.Значение каждого цвета - вещественное число - изменяется в промежутке [0,1]. (в данном примере шар зеленого цвета, следовательно значение поля diffuseColor 0 1 0.).Для получения нужных оттенков необходимо комбинировать значения красной, зеленой и синей составляющих. geometry - поле класса Shape. Содержит информацию о геометрических свойствах поверхности, описываемой классом Shape. Sphere { } - класс, описывающий шар. Примечание: вместо класса Sphere мог - бы находиться любой другой геометрический класс, например Cylinder, Cone и т.д. Детальное описание основных классов можно найти в Приложении. radius - поле класса Sphere. В качестве значения, этому полю ставится в соответствие неотрицательное вещественное число, задающее длину радиуса в единичных отрезках системы координат. Итак, выше был полностью рассмотрен и проанализирован простейший пример объекта VRML. Примечание: в приведенном примере были описаны далеко не все поля выше перечисленных классов. Однако, не смотря на это, приведенный пример является полностью функциональным, т.к. все во все неописанные поля были подставлены значения по умолчанию. Не рекомендуется дополнительно описывать поля данных, если их значения совпадают со значениями по умолчанию, т.к. это очень сильно перегружает текст программы. Все основные типы данных, а так же базовые классы, их поля, значения по умолчанию и диапазоны изменения приведены в приложении. Оператор USE#VRML V2.0 utf8 #Описание куба с именем MyBox Transform { translation 0 0 0 children [ DEF MyBox Shape { appearance Appearance { texture ImageTexture { url ["logo.jpeg"] } } geometry Box { size 2 2 2 } } ] } #Описание второго куба типа MyBox при помощи оператора USE Transform { translation 0 3 0 children [ USE MyBox ] } Примечание: в VRML файлах возможно применение комментариев. Для обозначения комментария используется символ #. Для описания параллелепипеда используется класс Box { } . size - поле класса Box,описывающее размеры параллелепипеда по осям X, Y и Z соответственно. В данном примере описывается построение двух кубов с ребром 2. Для сокращения текста программы применяется оператор USE. Общий вид: USE имя описанного выше объекта Оператор USE работает с именованными узлами. Примечание: по умолчанию все узлы в VRML не имеют собственного уникального имени.Имя может быть присвоено любому узлу, однако не имеет смысл именовать все объекты без необходимости. Собственные уникальные имена необходимы только динамическим объектам и объектам, аналоги которых будут создаваться при помощи оператора USE. Для присвоения объекту уникального имени необходимо воспользоваться оператором DEF. Общий вид: DEF имя объекта название класса В данном примере на кубы накладывается текстура, хранящаяся в файле LOGO.JPEG Отображение текста. Данный пример изображает строку текста при помощи стандартных средств VRML. #VRML V2.0 utf8 Transform { children [ Shape { appearance Appearance { material Material { diffuseColor 0.2 0.3 0.4 } } geometry Text { string ["HELLO WORLD !!!"] fontStyle FontStyle { family "COURIER" style "BOLD" size 1 } } } ] } Text { } - класс, содержащий описание изображаемой текстовой строки. string [ ] - поле класса Text, содержащее текстовую строку. fontStyle - поле класса Text, содержащее описание используемого шрифта.
ontStyle { } - класс, описывающий
характеристики шрифта. - поле класса FontStyle, которое содержит название шрифта. style - поле класса FontStyle, задающее стиль шрифта. size - поле класса FontStyle, задающее размер шрифта.
|
||||||||||||||||
Главная | Введение | Язык VRML | VRML 97 | Cсылки | Софт (Скачать) | О сайте |