sonyps4.ru

Где красиво убить время. Клиенты всегда правы

Язык VRML (Virtual Reality Modeling Language) предназначен для описания интерактивных 3D объектов и миров. Он был разработан для применения в сетях INTERNET и INTRANET. На сегодняшний день этот язык является сетевым стандартом и поддерживается ведущими мировыми производителями программного обеспечения.

VRML дает разработчику возможность создавать статические и динамические 3D модели а также позволяет включать и обрабатывать в моделях гиперссылки на звуковые, видео, html файлы, другие VRML объекты.

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

2. Что необходимо для работы с VRML

Для описания простых VRML объектов подходит любой текстовый редактор, имеющий возможность сохранять файлы в обычном текстовом формате. Описание VRML-объектов (мира) хранится в текстовом файле с расширением wrl.

Для воспроизведения VRML объектов необходим VRML браузер, поддерживающий язык VRML в спецификации 2.0 К популярным VRML-браузерам, поддерживающим Microsoft Internet Explorer, Opera и Mozila Firefox, относятся blaxxun Contact (www.blaxxun.com), Cortona3D Viewer (www.cortona3d.com), BS Contact VRML/X3D (www.bitmanagement.de), Octaga Player (www.octaga.com) и др.

3. Структура VRML файла

В общем виде, простейшая VRML-программа состоит из следующих частей:

    Заголовок

#VRML V2.0 utf8

Эта строка является первой для любого файла, содержащего описание VRML объектов. Строка является обязательной и не содержит отступы.

    Описания графа сцены

Виртуальный мир в терминологии языка называется сценой, которая представляется в виде графа из отдельных объектов, называемых узлами (node). В этой части описываются объекты, которые необходимы для построения для сцены (мира) задуманного пользователем.

4. Примитивы (Формы)

Формами в VRML называют объекты, из которых строятся VRML миры, т.е. формы являются основными строительными блоками (компонентами) VRML миров. Примитивные формы - это стандартные примитивные трехмерные объекты. К ним относятся Параллелепипед, Сфера, Цилиндр, Конус. Однако комбинируя их, можно строить достаточно сложные трехмерные изображения. Например, вот такие:

Формы описываются с помощью узла - Shape , который объединяет геометрические свойства объектов (форму,структуру) и свойства, определяющие внешний вид этих объектов (цвет, текстуру поверхности и т.д. . Геометрические свойства описываются с помощью поля geometry . Свойства, определяющие внешний вид описываются с помощью поля appearance .

Shape { geometry . . . appearance . . . }

Значением поля geometry являются геометрические узлы, т.е. узлы,определяющие форму и структуру объектов.

Стандартные примитивные геометрические узлы следующие:

  • Cylinder { . . . }

В полях примитивных геометрических узлов указываются их размеры.

Cone { height 3.0 bottomRadius 0.75 } Cylinder { height 2.0 radius 1.5 } Sphere { radius 1.0 }

Единицы измерения обычно метры, но могут быть и другие. Если размеры не указаны, то принимаются значения по умолчанию, которые для каждого типа узла свои.

Существует возможность объединения узлов различных типов в группы с помощью группирующих узлов. Одним из таких узлов является Group . Он имеет поле children , значением которого является список узлов, которые объеденяет данный узел.

Group { children [ . . . ] }

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

Пример узла Group:

#VRML V2.0 utf8 Group { children [ Shape { . . . }, Shape { . . . }, . . . ] }

Простая примитивная форма:

#VRML V2.0 utf8 Shape { appearance Appearance { material Material { }} geometry Cylinder { height 2.0 radius 1.5 } }

5. Трансформация форм

По умолчанию все формы строятся в «центре VRML мира». Трансформация (Transform) позволяет перемещать, вращать и масштабировать формы в VRML мире.

В VRML мирах система координат трехмерная и имеет следующую ориентацию:

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

Определение узла Transform:

Transform { translation . . . rotation . . . scale . . . children [ . . . ] }

Поле children определяет список форм, которые будут строиться в новой системе координат. Поле translation определяет сдвиг системы координат относительно родительской системы координат. Сдвиг происходит по осям X,Y и Z.

Transform { # X Y Z translation 2.0 0.0 0.0 children [ . . . ] }

Поле rotation определяет ориентацию системы координат, т.е. поворот системы координат вокруг оси вращения на заданный угол. Угол измеряется в радианах.

Transform { # X Y Z Angle rotation 0.0 0.0 1.0 0.52 children [ . . . ] }

Ось вращения определяет вектор вокруг которого осуществляется поворот. Обычно поворот осуществляется вокруг осей X,Y или Z:

Поворот осуществляется по правилу «правой руки».

Поле scale определяет увеличение или уменьшение размерности системы координат на коэффициент масштабирования по осям X,Y и Z.

Transform { # X Y Z scale 0.5 0.5 0.5 children [ . . . ] }

Поворот, сдвиг и масштабирование системы координат:

Transform { translation 4.0 0.0 0.0 rotation 0.0 1.0 0.0 0.785 scale 0.5 0.5 0.5 children [ . . . ] }

6. Внешний вид форм - цвет

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

Вспомним, что узел Shape описывает:

    геометрию формы (поле geometry) - форму или структуру

    внешний вид форм (поле appereance) - цвет и текстуру

Shape { appearance Appearance { material . . . } geometry . . . }

Значением поля appereance является узел Appereance , который описывает визуальные свойства форм (material, texture ) через описание материала и текстуры форм.

Appereance { material ... texture ... }

Значения полей могут быть не определены, но если какое-либо поле определено, то его значением должен быть узел определенного типа. Поле material описывает свойства материала поверхности форм. Значением поля является узел Material :

DiffuseColor . . . emissiveColor . . . transparency . . . }

Поля узла Material описывают:

    diffuseColor - цвет отраженного света

    emissiveColor - цвет излучаемого света

    transparency - прозрачность

    другие свойства материала

Цвет в VRML задается с помощью трех составляющих:

Любой цвет можно задать путем смешения этих составляющих в определенных пропорциях. Значения каждой составляющей лежат в диапазоне от 0.0 до 1.0 . Например:

Цвет Красный Синий Зеленый Белый 1.0 1.0 1.0 Желтый 1.0 1.0 0.0 Черный 0.0 0.0 0.0 Коричневый 0.5 0.2 0.0

Пример 1

Построим шар зеленого цвета, с центром, находящимся в точке пространства с координатами (1,1,1). Радиус шара равен 3. Для этого откроим блокнот и напишем следующий код:

#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Sphere { radius 3 } }

#VRML V2.0 utf8 Transform { translation 1 1 1 children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Sphere { radius 3 } } ] }

Сохраним полученный файл с расширением *.wrl.

Откроем полученный файл в браузере и посмотрим что получилось.

Задание 1

Самостоятельно создайте такие примитивы как Параллелепипед, Конус и Цилиндр различных цветов.

Пример 2

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

Размеры основных (сферических) частей снеговика и его итоговый вид представлены на рисунке. Посмотрим, как это выглядит на VRML.

Листинг программы:

#VRML V2.0 utf8 Transform # bottom {children # end children } # end Transform Transform # middle {translation 0 1.7 0 children # end children } # end Transform Transform # top {translation 0 2.8 0 children # end children } # end Transform Transform # right {translation 0.9 1.7 0 children # end children } # end Transform Transform # left {translation -0.9 1.7 0 children # end children } # end Transform Transform # red nose {rotation 1 0 0 1.57 translation 0 2.65 0.4 children # end children } # end Transform Transform # right eye {rotation 1 0 0 1.57 translation 0.1 2.8 0.38 children # end children } # end Transform Transform # left eye {rotation 1 0 0 1.57 translation -0.1 2.8 0.38 children # end children } # end Transform

Нетрудно видеть, что снеговик состоит из 5 сфер. В соответствии с этим в листинге 5 из 8 фрагментов очень похожи. Мы рассмотрим только один из них; поскольку первая (нижняя) сфера не является типичной (она имеет центр в начале координат и единичный радиус - см. рисунок), мы обратимся ко второй. Ее описание легко найти в тексте по комментарию middle.

Фрагмент, описывающий “средний” ком снеговика, начинается с узла типа Transform. Его назначение состоит в задании геометрических характеристик изображения объекта-потомка, в частности, наиболее часто используется его поле translation. В нашем случае это поле содержит тройку чисел 0 1.7 0, что является набором координат для центра рассматриваемой сферы. Таким способом обеспечивается позиционирование нашей сферы в виртуальном пространстве.

К описанному выше узлу через поле children подсоединяется стандартный узел типа Shape, описывающий уже знакомым нам образом сферу. Отметим только, что, кроме диффузного белого цвета снеговика, мы добавили ему еще некоторую “подсветку изнутри” с помощью поля emissiveColor. Желающие могут проверить, насколько хуже будет выглядеть снеговик без этой в общем-то не очень логичной меры.

Все остальные четыре сферических комка виртуального снега строятся аналогично. Разумеется, меняется их радиус и положение, которое нетрудно вычислить, используя имеющиеся на чертеже размеры.

Гораздо больший интерес представляют конический красный (VRML-цвет 1 0 0) нос, имитирующий традиционную морковку, и цилиндрические глаза.

Обратимся к описанию носа. Поскольку по умолчанию конус строится вершиной вверх, а нос снеговика требуется по понятным причинам направить “вперед”, необходимо произвести поворот конуса. Поле rotation обеспечивает это. Как мы уже видели в примере 6.1.5, поворот характеризуется набором из четырех чисел: тройка 1 0 0 описывает поворот вокруг оси X на 1.57 радиан, т.е. на 90°.

С аналогичным поворотом строятся и оба цилиндрических глаза черного (0.1 0.1 0.1) цвета.

Задание 2

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

Блуждая по просторам интернета, постоянно рискуешь напороться на некий объект, способный легко уничтожить уйму столь дефицитного личного и, пока еще, столь дорогого сетевого времени. Подобные "Черные Дыры" виртуальных закоулков без сомнения известны любому пользователю, сделавшему хотя бы несколько ходок, не говоря уже о профессиональных серферах и сталкерах сети. Странные существа люди - они даже составляют специальные хит-парады, посвященные подобным местам периодического времяубийства. Да, Вы и сами хорошо знаете всяческих Рэмблеров и прочие Топ 1000. С другой стороны, еще никто не пытается создать хит-парад интернет технологий, способных качественно и масштабно уничтожать личное время. HTML, mp3 и … и запишите VRML в первую пятерку!

Справка

VRML: аббревиатура от Virtual Reality Modeling Language (по отечественному ЯМВР, Язык Моделирования Виртуальной Реальности). Стандарт языка описания трехмерных сцен, содержащих объекты, а также возможных взаимодействий между объектами и наблюдателем. Основное назначение - описание набора объектов (сцены) в системах виртуальной реальности. Основное на данный момент применение - представление статической и интерактивной информации в сети интернет, в виде виртуальной трехмерной среды содержащей различные объекты. Существует три распространенных версии языка: VRML 1.0, 2.0 и VRML 97. На данный момент самой широко поддерживаемой версией является VRML 2.0. Развитие языка координируется VRML Architecture (по другим источникам Advisory) Group (перевод - Группа Архитектуры VRML), известной под аббревиатурой VAG.

История

Все началось 27 октября 1969 года, с первого TCP пакета. Затем были "telnet 1.0.0.2" и "ftp 1.0.0.2". Еще позже появился "ftp.cc.mil" и прочие DNS. В 1989 году начал развиваться WWW. Впрочем, все это события глубоко довиртуальной эры. В январе 1994 года, Mark Pesce и Tony Parisi придумывают концепцию трехмерного HTML, своеобразного языка описания трехмерных сцен с поддержкой гиперссылок, и создают пакет программ и экспериментальный формат, названные ими Labyrinth - первый прообраз VRML. В апреле 1994 года их проект участвует в First International Conference on the World Wide Web (Первой Интернациональной Конференции по WWW), где и звучит впервые термин VRML. Кстати, тогда он расшифровывался как Virtual Reality Markup Language, и лишь позже "markup" был заменен на более научно-звучное "modeling". В июне 1994 года известный журнал WIRED создает список рассылки, посвященной проблеме создания VRML, в течение недели на него подписываются около 1000 специалистов, что в 1994 году было крайне серьезным числом. Они и определяют направление развития концепции, придавая ей, в ходе многочисленных письменных обсуждений, первые очертания. До сих пор соблюдается хорошая традиция совершенствования языка: постоянный поиск решений удовлетворяющих большинство участвующих в обсуждении добровольцев, т.е. столь любимый первым президентом нашей родины консенсус. Практически сразу решено не заниматься изобретением велосипеда, а взять за основу какой либо существующий язык описания трехмерных сцен. Коим становится разработанный в Silicon Graphics Incorporation формат файлов программной библиотеки Open Inventor. Gavin Bell, инженер SGI модифицировал формат Open Inventor, создав первый вариант языка VRML, который был анонсирован в октябре 1994 года на "Второй Всемирной Конференции по WWW" и 5 ноября превратился в официальный проект стандарта VRML 1.0. Его коллега, Paul Strauss, написал первый VRML 1.0 клиент, назвав его трудно произносимым именем QvLib. Клиент был впервые представлен для платформы SGI, в январе 1995 года.

Печальная легенда гласит, что столь неудобоваримое название программы было придумано, дабы постоянно напоминать авторам о необходимости создать, чуть позже, название гораздо более удобное и красивое. Что, в полном согласии с известной пословицей, так и не было никогда сделано. Позже исходные тексты QvLib были предоставлены всем желающим, вызвав неконтролируемое распространение VRML по аппаратным платформам, сайтам и многочисленным сознаниям людей. Вскоре Parsi создает свою собственную компанию, Intervista, и начинает разработку трехмерного … как это лучше перевести … обозревателя, основанного на VRML. Который был назван WorldView и успешно существует до сих пор. Тогда же Parsi, Pesce и один известный архитектор из Сан-Франциско осуществляют проект Virtual SOMA - VRML модель южной части пригорода, призванной стать центром мультимедиа и интернет бизнеса, первое масштабное наполовину коммерческое применение VRML технологии. В апреле 1995 года SGI анонсирует новую программу просмотра WebSpace, открывая широкую кампанию по продвижению VRML. В ней принимаю участие такие фирмы, как Netscape, DEC, Spyglass, и NEC. Начинается рекламная шумиха в компьютерной (и не очень) прессе. На конференции SIGGRAPH"95 язык VRML, несомненно, является основной темой. С этого момента следует стремительная лавина анонсов новых обозревателей, средств создания VRML сцен и просто содержащих VRML контент сайтов. В августе 1995 года Pesce анонсирует создание VAG, начинается разработка проекта стандарта VRML 2.0. Первоначальный проект забит и затоптан в ходе обсуждения, но присланы шесть новых вариантов от ведущих компьютерных фирм:

  1. Active VRML от Microsoft
  2. Dynamic Worlds от GMD сотоварищи
  3. HoloWeb от Sun
  4. Moving Worlds от Silicon Graphics сотоварищи
  5. Out of this World от Apple
  6. Reactive Virtual Environment от IBM Japan

В ходе обсуждений выявляется лидер - Moving Worlds. Вскоре, благородная Apple отказывается от своего проекта в пользу Moving Worlds, остальные гиганты продолжают настаивать на своих вариантах. Некоторое время Moving Worlds шлифуется, постепенно становясь проектом стандарта VRML 2.0. В июне 1996 представители VAG договариваются, подписывая окончательное соглашение, считать работы над VRML 2.0 завершенными. Кстати, несмотря на поиск консенсуса, работа по созданию и принятию стандарта продвигается невероятно быстро. В декабре 1996 стандарт ISO/IEC DIS 14772-1 (VRML 2.0) принят окончательно. А в октябре 1997 года был завершен проект стандарта новой, расширенной версии языка, названной, в соответствии с последними веяниями, VRML 97. Следует отметить, что VRML абсолютный рекордсмен по скорости разработки и принятия официального стандарта, среди всех компьютерных языков. Развитие VRML продолжается, хоть и не столь бурно, по сей день. За сим прошу откланяться.

Из чего сделаны мальчики?

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

  1. Описать виртуальный мир.
  2. Предъявить этот мир пользователю, позволив ему взаимодействовать с ним.

Решим эти задачи, попробовав себя в непростой роли создателей VRML. В первую очередь необходимо создать информационную структуру, описывающую мир. Чрезвычайно гибкая и удобная (для пользователя или математика, но не для реализующего ее обработку программиста) структура - граф. Т.е. набор узлов (в терминологии VRML - node) дополненный информацией о связях между ними. Узлы похожи на обычные структуры данных, они содержат поля (fields) и события (events). Cвязи между узлами реализуются с помощью полей, имеющих тип указателя (на узел). Фактически, события также представляют собою указатель на объект способный эти события генерировать, или воспринимать, что сразу разделяет их на два типа - исходящие (EventOut) и входящие (EvevnIn), соответственно.

Благодаря подобной концепции, VRML, несомненно, может считаться объектно-ориентированным языком. Все это безобразие, схематически изображенное на рисунке 1, в сумме описывает мир * , в VRML понимании этого слова. Поля Field 1 и 2 представляют собою первичные параметры (например, цвет или точка в трехмерном пространстве), Field 3 является набором указателей на другие узлы, а Event 1 событием, поступающим от двух узлов.

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

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

VRML технология

Стратегия Описание трехмерного виртуального мира, возможность взаимодействия с объектами.
Понятийный уровень Понятие узла, набора, поля, события.
Событийный уровень Правила генерации событий.
Структурный уровень Конкретные типы полей и событий (точка, число, цвет, URL,…).
Конкретные типы узлов, их структура (источник,…).
Языковой уровень Синтаксис описания структур (, {}, ROUTE, DEF,…).
Синтаксис описания узлов (Field, EventIn,…).
Имена предопределенных типов полей (SFColor, SFBool,…).
Имена предопределенных типов событий (addChildren,…).
Имена предопределенных типов узлов (Anchor, Material,…).
Клиентский уровень Среда распространения VRML описаний (файлы, HTTP,…).
Среда визуализации (OpenGL устройства, принтер,…).
Интерфейс навигации и взаимодействия (мышь, вид из глаз,…).

Типы, странные и не очень

Разберемся с первичными типами, основными строительными кирпичиками языка VRML. Все типы полей делятся на два класса, содержащие одно значение (так называемые SF типы) и наборы (MF). Для пущей простоты, имена первых всегда начинаются с букв SF, а вторых, как Вы, наверное, уже догадались, с MF. Для записи элементов набора используются квадратные скобки. Например, если у нас есть поле, набор целого типа MFInt32, под названием MyIntegerSet, мы можем описать его следующим образом:

MFInt32 MyIntegerSet

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

MyIntegerSet [ 1, 0, 0, 1 ]

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

MyIntegerSet

MyIntegerSet [ 1 ] или MyIntegerSet 0

И, даже, поступить так:

MyIntegerSet [ 0, ]

Некоторые первичные типы имеют как SF так и MF разновидность, например, если тип называется Color то соответствующие имена записываются как SFColor и MFColor,. Следующая таблица претендует на некоторую долю информативности:

Первичные типы данных

Имена типов Описание Пример значения
SFBool Логический тип TRUE
FALSE
SFColor
MFColor
Цвет (три плавающих числа из диапазона 0.0…1.0) 0.1 1.0 0.0
[ 0.1 0.2 0.3, 0.3 0.2 0.1 ]
SFFloat
MFFloat
Плавающее число (IEEE, 32 бит, С нотация) 1.1
[ 3.1415926, .01e-22, 1. ]
SFImage Изображение в виде X Y NC NC=1 - 255 градаций серого на одну точку
2 - по 255 градаций серого и прозрачности на точку.
3 - по 255 градаций RGB на одну точку.
4 - по 255 градаций RGB и прозрачности на точку.

320 200 1 0xff 0xff 0x00 0x2f…

20 30 2 0x1200 0x1300 0x00ff…

30 20 3 0xff00ff 0x00ff00…
25 25 4 0xff00ff00 0x000000ff…

SFInt32
MFInt32
Целый тип (со знаком, 32 бит, С нотация) 0x33
[ 0xffabcd9, 1, 2, -555555 ]
SFNode
MFNode
Определяет ссылку на узел. В качестве значения можно использовать экземпляр узла. Anchor { … }
[ Anchor { … }, Material {…} ]
SFRotation
MFRotation
Поворот. (ось поворота и угол, X Y Z Alpha). 0 1 0.0 3.1415926
SFString
MFString
Строка. (код UTF-8, в C нотации). "Hello, world! "
[""Sam" it"s me", "www.microsoft.com"]
SFTime Время, секунд с 1 января 1970 года. (UNIX формат, плавающее число, 64 бит, в С нотации). 1.34343454545e20
SFVec2f
MFVec2f
Двумерный вектор. (Плавающие числа 32 бита, в С нотации). 0.0 1.0
[ 1.0 2.0, 1.0 0.0 ]
SFVec3f
MFVec3f
Трехмерный вектор. (Плавающие числа 32 бита, в С нотации). 0.0 1.0 2.0

Засим, первичные типы успешно закончились.

Узлы, связи и все все все…

А теперь посмотрим все остальное. Основной объект языка - узел. VRML файл (программа) состоит из некоторого количества прототипов (определений новых типов узлов), некоторого количества узлов , заполненных конкретной информацией, и не менее некоторого количества событийных связей между узлами. Все эти элементы могут быть расположены в произвольном порядке.

Экземпляры узлов описываются и заполняются так:

Где специальное слово ROUTE позволяет установить автоматическую отправку конкретного исходящего события одного узла в конкретное входящее событие другого. Также, можно создавать именованyые экземпляры узлов, с возможностью их одновременного использования в нескольких местах программы:

Заполним, для примера, узел предопределенного типа Anchor, попутно продемонстрировав использование неразлучной парочки DEF/USE :

# Простой красный материал DEF SimplyRedMaterial Material { diffuseColor 1 0 0 } # Ссылка в виде шарика Anchor { url "http://www.microsoft.com/" children [ Shape { geometry Sphere { radius 2.0 } appearance Appearance { material USE SimplyRedMaterial } } ] }

Определяет ссылку на сайт всеми любимой компании, которая (ссылка, не компания) содержит объект, содержащий, в свою очередь, геометрическую информацию (сфера единичного радиуса) и описание материала имеющего красный цвет в рассеянном свете. Уф… Вот такая вложенная структура данных понадобилась ради одного маленького красненького шарика, неправда ли, это эффективное средство убийства времени набирающего подобные программы человека? Шутки в сторону, вернемся к примеру. Поле children является стандартным для всех узлов, содержащих подчиненные узлы (так называемые "дети") и представляет собою набор типа MFNode . Как правило, узел каким то образом влияет на всех своих детей, например, перемещая их в пространстве, масштабируя, или придавая им какие либо общие свойства. В действительности, узел типа Material имеет множество других параметров, но, в данном примере, мы полагаемся на их значения по умолчанию, определенные где-то в недрах языка. Обратите внимание на комментарий, который обозначается символом # и продолжается до конца строки включительно. Кстати, если добавить в предыдущий пример такую вот первую строчку:

#VRML V2.0 utf8

Обязательную для всех VRML 2.0 программ, мы получим полноценный файл, который можно назвать "КакВамУгодно.wrl ", открыть в соответствующем обозревателе и даже кликнуть (по красному шарику). До сих пор, мы имели дело с заранее определенными, в языке, типами узлов Anchor , Shape , Sphere и Material . Но, если мы того пожелаем, можно легко определить новый тип узла. Делается это следующим образом:

PROTO [

Классификатор определяет каждый конкретный член нового типа узла. Возможны следующие классификаторы:

Поле данных, реагирующее на события (exposedField ) порождает исходящее событие _changed , которое генерируется при изменении значения данного поля каким либо образом и входящее событие set _, генерируя которое, значение поля можно менять. Разумеется, тип данных этих событий совпадает с типом обслуживаемого или поля. В квадратных скобках оператора PROTO задается интерфейс нового типа узла (доступные для использования поля и события), а в фигурных описывается его реализация. События представляют собою данные, какого либо типа, передаваемые от узла к узлу. Причем, настройка путей передачи происходит специальным ключевым словом ROUTE :

ROUTE . TO .

Вот пример использования ROUTE - столь любимый мною красный шарик, издающий звук, когда с ним сталкивается наблюдатель: DEF SphereWithSound Collision { children [ Shape { geometry Sphere { } appearance Appearance { material USE SimplyRedMaterial } } Sound { source DEF BoomSound AudioClip { url "boom.wav" } } ] } ROUTE SphereWithSound.collideTime TO BoomSound.startTime

Подобным образом можно легко строить сложно связанные иерархии объектов, в которых изменение каких либо параметров одного узла вызывает незамедлительную реакцию всей системы. Толкнул кубик, а с ним двинулся и шарик, и все такое… Приведу небольшую VRML программу, демонстрирующую не только определение новых типов узлов, но и другие возможностями языка: #VRML V2.0 utf8 PROTO TwoColorStool [ field SFColor legColor .8 .4 .7 field SFColor seatColor .6 .6 .1 ] { Transform { children [ # Сиденье стула Transform { translation 0 0.6 0 children Shape { appearance Appearance { material Material { diffuseColor IS seatColor } } geometry Box { size 1.2 0.2 1.2 } } } # Первая нога Transform { translation -.5 0 -.5 children DEF Leg Shape { appearance Appearance { material Material { diffuseColor IS legColor } } geometry Cylinder { height 1 radius .1 } } } # Вторая нога Transform { translation .5 0 -.5 children USE Leg } # Третья Transform { translation -.5 0 .5 children USE Leg } # Последняя Transform { translation .5 0 .5 children USE Leg } ]} }

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

  • Transform - осуществляет геометрическое преобразование своих детей, например сдвиг, поворот или масштабирование.
  • Shape - видимый объект, состоит из описания геометрии и параметров ее отображения, таких как материал, текстура и т.д.
  • Box , Cylinder - прямоугольник и цилиндр, соответственно.

Также, нам встретился новый оператор IS :

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

Продолжим: DEF XForm Transform { children [ TwoColorStool { legColor 1 0 0 seatColor 0 0 1 } DEF Clicker TouchSensor {} DEF TimeSource TimeSensor { cycleInterval 2.0 } # Animate one full turn about Y axis: DEF Animation OrientationInterpolator { key [ 0, .33, .66, 1.0 ] keyValue [ 0 1 0 0, 0 1 0 2.1, 0 1 0 4.2, 0 1 0 0 ] } ]} ROUTE Clicker.touchTime TO TimeSource.startTime ROUTE TimeSource.fraction_changed TO Animation.set_fraction ROUTE Animation.value_changed TO XForm.rotation NavigationInfo { type "EXAMINE" }

Здесь, мы определяем новый узел XForm типа Transform, который кроме уже описанной нами табуретки (синего цвета с зелеными ножками, рисунок 2) содержит датчик прикосновений TouchSensor , порождающий событие, когда в обозревателе по нашей табуретке щелкают мышкой (т.е. касаются) и таймер TimeSensor . Таймер настроен таким образом, что постоянно генерирует событие fraction_changed значение которого пробегает значение от 0 до 1 за две секунды. Также используется узел OrientationInterpolator , интерполирующий значение типа SFRotation по таблице в зависимости от значения поля fraction . Затем соответствующим образом построено взаимодействие между датчиком прикосновений, таймером, интерполятором и трансформатором позиции табуретки (три ROUTE ). В итоге мы получили объект (в нашем случае табуретку, но на ее месте может быть узел любого заранее определенного типа) способный повернуться вокруг себя за две секунды, если к нему прикоснулись. Избушка, избушка, встань к монитору… Последняя строчка переводит обозреватель перейти в режим изучения объекта, в котором наблюдатель не двигается, а просто рассматривает и трогает предмет.

Небольшое продолжение к нашему примеру демонстрирует возможность использования Java Script (если быть корректным - ECMA Script) в VRML программах:

DEF Sizer Script { eventIn SFTime startSizing eventOut SFVec3f scale field SFFloat sc 1.0 field SFBool sizeUp TRUE url "javascript: function startSizing() { if(sizeUp) sc+=0.04; else sc-=0.04; if(sc 1.3) sizeUp=!sizeUp; scale=sc; scale=sc; scale=sc; } " } DEF Ticker TimeSensor { cycleInterval 0.05 loop TRUE enabled FALSE } ROUTE Clicker.isOver TO Ticker.set_enabled ROUTE Ticker.cycleTime TO Sizer.startSizing ROUTE Sizer.scale TO XForm.scale

Вот так, с помощью предопределенного узла Script мы получаем практически безграничные возможности в определении правил, по которым будет жить наш мир. В данном примере мы заставляем нашу табуретку циклически менять размер (дышать), пока над ней находится курсор обозревателя, вне зависимости от того, прикоснулись мы к ней или нет. Для этого используется событие isOver узла TouchSenser, реагирующее на описанную выше ситуацию с мышиным курсором, таймер генерирующий 20 раз в секунду событие cycleTime и небольшой скрипт, создающий масштабирование, которое затем применяется к объекту.

Дополнения

Все, что было написано ранее, ни в коем случае не претендует на роль руководства или описания. Это лишь попытка показать, что же в действительности стоит за весьма претенциозным термином VRML. Любители формальных грамматик и полных описаний, а также просто заинтересованные читатели могут заглянуть . Где можно найти исчерпывающее описание синтаксиса и концепций VRML 2.0. И множество прокомментированных примеров от SGI, послуживших отличной основой для написания приведенных выше VRML программ. Впрочем, будьте внимательны: в доступных по этому адресу примерах, к моему искреннему удивлению, практически сразу обнаружилось несколько грубых ошибок. Которые, разумеется, убили некое сверхплановое количество свободного времени, но были успешно опознаны и уничтожены. Предвидя возможные недостаток желания или нехватку сетевого времени, приведу список некоторых предопределенных узлов VRML 2.0, отметив, где и как их можно использовать:

Группировка объектов:

Специальные группы:

Общие узлы:

Генераторы событий:

Геометрическая информация:

Дополнительная информация:

Свойства внешнего вида:

Интерполяторы по таблице значений:

Управление глобальными параметрами обозревателя:

Background Фон изображения
Fog Характеристики атмосферы
NavigationInfo Режим навигации и взаимодействия
Viewpoint Точка обзора

Клиенты всегда правы

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

  • Движение вперед-назад и повороты вправо-влево
  • Движение вверх-вниз и вправо-влево
  • Повороты вверх-вниз и вправо-влево
  • Автоматическое движение до указанного объекта
  • Переход на заранее определенную точку зрения
  • Возможность "потрогать" объект

Эти действия являются стандартными практически для любой клиентской программы. Опишу два самых успешных, распространенных и самозабвенно конкурирующих обозревателя, соответствующих стандарту VRML 2.0.

Cosmo Software - Cosmo Player:

Разработка SGI. Представляет собою plug-in для браузера, интегрируется в Netscape 3.0 и более или Microsoft Explorer 4.0 и более. Для отображения использует библиотеку OpenGL, и, следовательно, аппаратную акселерацию на любом OpenGL совместимом ускорителе. Для создания объемного звука используется DirectSound (DirectX 3.0) и выше, следовательно, также поддерживается аппаратное ускорение. Клиент соответствует стандарту VRML 2.0 и VRML 97. Поддерживает полноценные Java классы (а не только ECMA Script). Файлы VRML 1.0 автоматически конвертируются в VRML 2.0. Все передаваемые данные могут быть запакованы в GZIP архив, для уменьшения времени загрузки мира. Может быть использован любой программой, как встроенный ActiveX элемент, что позволяет программистам легко добавлять поддержку просмотра VRML в свои продукты. Содержит множество полезных мелочей, начиная с отката действий и заканчивая отладочной консолью для создающих VRML файлы разработчиков. Среди досадных ошибок - неправильная обработка параметров некоторых источников освещения, некоторые проблемы с заданием скорости перемещения из программы и поддержкой анимационных GIF изображений. В поставку входит очень миролюбивая игра "Chomp", с акулой в главной роли, полностью написанная на VRML и ECMA Script. Отличные скоростные качества. Данный клиент всячески рекомендуется мною к использованию. Поддерживаются различные платформы, в том числе: SGI, Windows (9x/NT/3.11) и Mac OS. Органы управления подробно изображены на рисунке 4, взятом из документации. Последнюю версию (Cosmo Player 2.1), море информации и отлично оформленный сайт с VRML афишками Вы найдете по адресу

Microsoft VRML 2.0 viewer:

Разработка … понятно чья. Основан на коде упомянутого ранее WorldView. Представляет собою plug-in для браузера, интегрируется в Microsoft Explorer 3.0 и более. Для отображения использует библиотеку DirectX 3.x и выше, и, следовательно, аппаратную акселерацию на любом DirectX совместимом ускорителе. Соответствует стандарту VRML 2.0 (есть некоторые несущественные расхождения). Поддерживает полноценные Java классы (а не только ECMA Script), но только как URL, а не внутри VRML текста. Поддерживает файлы VRML 1.0. Есть некоторые проблемы с GZIP файлами, приводящие, как правило, к предупреждениям которые можно игнорировать, но иногда прекращающие загрузку миров. Есть некоторые проблемы с реализацией ProximitySensor и обработкой сообщений таймера и событий, связанных с взаимодействием, что крайне печально. Достаточно компактный и удобный интерфейс. Несколько бестолковые настройки. Производительность (немного) и визуальное качество (сильно) уступают Cosmo Player. Рекомендуется как замена Cosmo Player, в случае невозможности использовать его по какой либо причине. Более подробная и глубокая справочная информация, подробно рассмотрено большое количество неоднозначных аспектов конкретной реализации. Не может быть использован как ActiveX элемент в сторонних программах. Только Windows (9x/NT) платформа. Последнюю версию, информацию и устаревшую галерею Вы найдете по адресу www.microsoft.com/vrml/

Впрочем, полуось (IBM OS/2) также не забыта разработчиками: фирма Now Interprises разработала OS/2 VRML viewer.

Редакторы, корректоры, конверторы:

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

  • Конвертеры - преобразуют файлы других трехмерных форматов в VRML.
  • Валидаторы - проверяют VRML файлы на наличие синтаксических и структурных ошибок.
  • Интерактивные редакторы - позволяют редактировать VRML миры без непосредственного программирования, как это делается в большинстве трехмерных студий.

Где красиво убить время

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

Обязательно загляните на сайт Российской компании

Заключение

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

P.S.

В настоящее время на рынке VRML браузеров доминируют три следующие программы:

  1. Blaxxun Contact 4.3 () - поддержка сплайновых поверхностей (NURBS), версии с поддержкой DirectX/OpenGL, PIII-оптимизация геометрических вычислений, клиент к многопользовательским VRML-мирам;
  2. Cortona VRML client 2.1 () - поддержка сплайнов и сплайновых поверхностей (NURBS), поддержка Macromediа Flash и Real Video технологий, графические API DirectX/OpenGL, звуковой EAI2, PIII-оптимизация, версия клиента для многопользовательских VRML-миров;
  3. CosmoPlayer 2.1 - DirectX/OpenGL

Причем коллектив программистов, писавших CosmoPlayer, уже не существует, и этот продукт, судя по всему, не будет далее развиваться.

Первым и самым главным инструментом должны стать голова и руки! Можете смеяться, но иногда пользуюсь даже миллиметровкой для создания набора вершин, скажем для экструзии.

Теперь о программах. При создании мира Вам понадобятся разные программы для разных целей:

Программы для создания 3D объектов и миров

Я не касаюсь программ типа 3DS, которые хотя и могут экспортировать в VRML код, все-таки специально на эти цели не ориентированы, посему создают ОЧЕНЬ НЕоптимальный код (см пример в разделе Extrusion). Советую такие программы при создании миров не использовать вообще!

Программы для проверки и оптимизации VRML кода

Существуют программы, которые проверяют готовый код на соответствие VRML спецификации, а также на совпадение значений параметров с принятыми в спецификации по умолчанию (удаление такого излишнего текста позволяет сильно сократить объем файла!) Можете забрать две программки и (vorlon более солидная вещица).

В этом же классе есть и свои "тяжеловесы" - профессионаьные программы со множеством разнообразных возможностей. Можете посмотреть в сети chisel (), и flamingo (). Обе программы - это нечто!

Программы для создания текстур

Более универсально - научиться или, если Вы уже умеете, продолжать работать с Photoshop"ом. Уж по этому продукту в русской сети великое множество документов, конференций и т.д.

Но есть и более специализированные вещицы, такие как Infinity textures

Программы для создания звука

Звук пока плохо прижился в интернете в целом, и в создании виртуальной реальности, в частности. Спецификацией VRML97 строго предписано поддерживать формат WAV и рекомендовано поддерживать MIDI. У меня не возникало потребности специально для создания миров записывать и редактировать звуковые файлы. Если задумать что-нибудь прилично-качественно-звучащее, то получится очень большого размера, что не есть хорошо. Так что это отпадает, а простенькие звуки типа скрипа, звона и т.д. всегда можно найти в сети.

Но если у Вас другое мнение/опыт, мыльте - обсудим.

Броузеры

Броузеров для VRML файлов есть довольно много (больше, чем редакторов). Я остановлюсь на четырех, поддерживающих VRML97 (Microsoft VRML 2.0 Viewer, Cosmoplayer, GLView, Cortona), хотя если Вы собираетесь часто просматривать файлы VRML1.0, то можно еще посоветовать Chaco VRScout (очень быстрый!) и VRWeb.

Так вот, впечатление от работы с броузерами довольно смешанное, у каждого есть плюсы и минусы. Самый быстрый - Cosmoplayer (хотя некоторые склоняются к Cortona. Может быть, я ведь статистику по fps не вел. Если интересно, подробнее , да и в comp.lang.vrml периодически этот вопрос поднимают).

Здесь таблица, в которой я постепенно накапливаю свои недовольства разными броузерами. Желающих опровергнуть или просветить милости прошу в мыло.

Недостатки или то, что мне кажется неудачным
Cosmoplayer 2.1 - неверное отображение некоторых сложных объектов, созданных с помощью Extrusion
Cortona (ver. 2.0 release 20) - VRML сцена, загруженная из другой VRML сцены (например с помощью anchor"а) не рассматривается, как новый документ, поэтому к предыдущей сцене Вы не вернетесь кнопкой "Back"
MS VRML2.0 Viewer (ver. 1.0) куча недостатков, все сюда не влезут... :
- проблемы при отображении PointSet
- не учитывает размеры аватара из NavigationInfo
- не поддерживает обращение к viewpoint"ам через #имя_viewpoint
- вылетает на файлах с интерполяторами, созданными в CosmoWorlds
GLView - не распознает значение "ru" поля language узла FontStyle

Если Вы только просматриваете VRML файлы, то лучше не ставить MS VRML Viewer, но а если Вы их и создаете, то наоборот старайтесь протестировать в нем свои файлы, как он их исковеркает.

3D Studio Max R3.1 обладает встроенным экспортером в VRML формат, который способен переводить MAX файлы в VRML. Этот экспортер поддерживает два VRML формата: VRML 97 и VRML 1.0. В этом уроке мы сосредоточимся на VRML 97 (это более новая версия) и разберемся в способах создания и экспорта файлов VRML в среде Max R3.1.

Прежде чем начать


Для работы нам потребуется не только 3DS Max R3.1, но и VRML вьювер, а также текстовый редактор. Кроме того, если вы собираетесь работать с текстурами, необходимо иметь программу обработки 2D графики (Photoshop).

VRML вьювер


Самый простой способ просмотреть VRML файл - это воспользоваться стандартным браузером (Netscape Navigator или Communicator, или Microsoft Internet Explorer), снабженным VRML плагином. При написании этой статьи я пользовался Cosmo Player 2.1.1., созданного SGI и распространяемого группой CAI - вам придется скачать около 4мб. Помните, что различные плагины и вьюверы рендерят файлы по-разному, и если вы создаете VRML для широкой публикации - будет лучше если вы протестируете его в разных программах.

(вышеописанный вьювер можно также поискать - и выбрать наиболее удобный для скачивания сервер)

Текстовый редактор


Подобно HTML VRML - это формат, основанный на ASCII и вам понадобится текстовый редактор для проверки и модификации кода. Я пользовался MS Word 97.

Графический редактор


Не буду подробно останавливаться на этом - думаю всем понятно, что при создании текстур программу, подобную Photoshop трудно заменить.

Введение в VRML


Давайте разберемся - что же такое VRML? Данный формат напрямую связан с понятием Virtual Reality (VR) - интерактивный трехмерный мир, по которому пользователь может перемещаться в зависимости от своего желания. В этом мире пользователь называется "avatar". Virtual Reality Modeling Language (VRML) - это ASCII язык, используемый для описания подобных миров. Подобно HTML, это язык, не являющийся чьей-либо собственностью и его может использовать каждый совершенно свободно, он поддерживает использование текста, графики, анимации и звука и был принят за общий стандарт. VRML браузеры осуществляют рендеринг таких миров в реальном времени.

Общие советы по созданию файлов для VRML в Max R3.1


При создании 3д сцен для последующего экспорта в VRML вы всегда должны пользоваться следующими правилами:

Минимизация количества полигонов


VRML сцены не должны содержать больше 3000 полигонов, в противном случае могут возникнуть проблемы, и не только со скоростью загрузки. Техники, используемые для этого описаны ниже.

Анимация с использованием простейших трансформаций


Анимация простейших трансформаций (масштабирование, перемещение, вращение) занимает гораздо меньше места в файлах VRML чем анимация использующая координатную интерполяцию. При координатной интерполяции VRML экспортер вынужден просчитывать каждую вершину отдельно, что отнимает время и существенно увеличивает размер конечного файла. Координатная интерполяция используется при анимации с использованием spacewarps, taper, модификаторов bend и twist, а также при анимации с использованием стека модификаторов и параметров объекта.

Материалы


Пользуйтесь исключительно материалами типов standard и multi/sub-object. Другие типы материалов (composite, morpher, raytrace) экспортироваться не будут.

Текстуры


Использование текстур увеличивает размер конечного файла, поэтому пользуйтесь текстурами небольшого размера и не злоупотребляйте ими.

Освещение


Если вы используете только стандартное освещение Max, скорее всего объекты вашей сцены не будут достаточно освещены. Обычно бывает необходимо добавить дополнительные источники освещения и при этом учитывать возможные манипуляции и передвижения пользователя. Если вы используете несколько источников освещения - уменьшите у них параметр multiplier иначе сцена будет слишком яркой.


Обязательно используйте хотя бы одну камеру - она будет стартовой точкой вашего мира. При использовании нескольких камер вам будет предложен выбор - какую из них сделать стартовой. Все камеры сцены экспортируются в VRML файл и пользователь сможет легко переключаться между ними. Таким образом использование нескольких камер в разных точках сцены сделает ее более удобной для изучения. Имя камеры становится именем вьюпорта, поэтому давайте камерам разумные имена, чтобы пользователь знал, куда отправит его та или иная камера.

Полигоны


Перед экспортом в VRML необходимо прятать те полигоны, которые невозможно увидеть. Спрятанные полигоны (hidden faces) не будут экспортироваться, что позволит существенно сократить размер файла.


Используйте примитивы (sphere, cylinder, cone, box и т.д.) где только возможно. Конвертирование объекта в editable mesh увеличит размер файла даже при минимальных изменениях геометрии.

Основные шаги при создании VRML сцен


Ниже приведен наиболее выгодный порядок действий по созданию VRML сцен.

    создание геометрии

    создание источников освещения и камер

    присваивание объектам материалов и текстур

    анимирование

    вставка вспомогательных VRML-объектов

    экспорт в VRML

    использование барузера для тестирования файла

    редактирование файла в текстовом редакторе (при необходимости)

Советы по созданию геометрии, камер и освещения а также материалов и анимации были даны выше, дальше мы рассмотрим собственно процесс экспорта и подготовку к нему.

Вставка вспомогательных VRML-объектов


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

Первый шаг является общим по созданию любого вспомогательного объекта (helper object):

Откройте панель Creation и выберите вкладку Helpers.

В выпадающем меню выберите VRML 97.

Выберите тип объекта (Anchor, AudioClip, Background и т.д.) нажав на соответствующую кнопку.

Во вьюпорте Max кликните мышкой, чтобы создать объект. Если вы не уверенны в своих действиях - создавайте объект в Top viewport.

С.Г.Соловьев. Vitrual Reality Toolbox - обзор

Vitrual Reality Toolbox

VR Toolbox это пакет, решающий задачи взаимодействия и управления виртуальными моделями динамических систем во времени. Он является расширением возможностей MATLAB и SIMULINK в мир графики виртуальной реальности.

Большинство материалов взято из стандартной документации www.mathworks.com что является довольно ествественным, так что для более полного ознакомления с данным вопросом рекомендую и Вам обратиться к ней, так как некотороые аспекты связанные с VR Toolbox не нашли своего отражения в этой статье, по одной простой причине - в одной статье это не описать.

VR Toolbox. Основные понятия

Обратимся к основным понятиям, связанным с рассматриваемой технологией.

  • Виртуальный мир (Virtual World) - трехмерная сцена созданная с помощью VRML (Virtual Reality Modeling Language) технологии.
  • Динамическая система(Dynamic sustem) - система созданная с помощью MATLAB или SIMULINK, описывающая систему объектов созданных с помощью VRML.
  • Анимация(Animation) - изменяющаяся под воздействием сигналов из SIMULINK трехмерная сцена.
  • Манипуляция(Manipulation) - изменение позиций или свойств объектов виртуального мира в процессе моделирования
  • VRML браузер(viewer) - используется для просмотра миртуальных миров. Можно использовать встроенный в VR Toolbox браузер, или установить плагин к вашему Web-браузеру.
  • VRML редактор - редактор для написания VRML кода. Есть специализированные редакторы и конструкторы, например VRMLPad или V-Realm Builder. Если вы уверены в своих силах, то подойдет даже обычный текстовый редактор.

Возможности VR Toolbox

Virtual Reality Toolbox предоставляет много возможностей для создания и просмотра моделей динамических систем в виртуальной реальности, а также возможность взаимодействия с этими моделями в реальном времени. Опишем эти возможности:

Поддержка VRML

VRML это открытый стандарт разработанный ISO(International Organization for Standartization). Язык VRML является обычным текстом, использующим WWW-ориентированный формат. С помощью VRML вы создаете виртуальный мир, который можно просмотреть с помощью VRML-браузера(см. ниже) и затем связываете VRML-модель с моделью SIMULINK.

Последней на текущий момент спецификацией VRML является VRML97, стандарт ISO/IEC 14772-1:1997. Спецификафия доступна по адресу www.web3d.org . Спецификация содержит описание создания 3D-сцен, звуков, локальной и удаленной работы с VRML.

VR Toolbox анализирует структуру виртуального мира, определяет какие для него доступны типы сигналов и делает возможным посылку этих сигналов из MATLAB и SIMULINK. Встроенный в VR Toolbox VRML-браузер поддерживает большинство узлов описанных в стандарте VRML97 (понятие узла будет определено ниже или читайте спецификацию) , позволяя осуществлять полный контроль созданным виртуальным миром. В любом случае существует множество plug-in"ов к Web- браузерам, которые поддерживают все возможные узлы.

Благодаря VR Toolbox все изменения сделанные в виртуальном мире отражаются и в MATLAB или SIMULINK. Например, если изменить расположение камеры в виртуальном мире, то и изменится соответствующее свойство объекта vrworld в MATLAB или SIMULINK. Также VR Toolbox содержит функции позволяющие читать и изменять свойства объектов виртуального мира.

Поддержка интерфейса MATLAB

VR Toolbox поддерживает гибкий MATLAB интерфейс для работы с виртуальным миром. После создания объектов в MATLAB и ассоциирования их с виртуальным миром, можно осуществлять управление этим виртуальным миром посредством предоставленных для этого функций и методов. Из MATLAB можно изметять позиции и свойства VRML объектов, связать те или иные действия с графическим интерфейсом пользователя (GUIs) посредством так называемых callback функций. Можно также просматривать мир посредством VRML-браузера и устанавливать значения для всех доступных узлов и их полей.

VR Toolbox также предоставляет функции для чтения и изменения свойств виртуального мира и сохранения VRML файлов с текущей конфигурацией виртуального мира.

Т.е. MATLAB предоставляет средства для для управления и манипуляции виртуальными объектами посредством использования объектов самого MATLAB.

Поддержка интерфейса SIMULINK

Построив модель динамической системы в SIMULINK с помощью VR Toolbox можно наблюдать имитацию ее поверения в реальном времени в 3D реальности.

VR Toolbox содержит блоки которые позволяют непосредственно соединить и передавать сигналы от SIMULINK к построенному виртуальному миру. Такой подход позволяет воспроизвести динамическую модель как трехмерную анимацию.

С помощью блоков SIMULINK можно использовать многие возможности предоставляемые VR Toolbox. Достаточно поместить блок на SIMULINK диаграмму и выбрать виртуальный мир которому будут посылаться сигналы. VR Toolbox автоматически проверяет виртуальный мир на доступные VRML узлы, которые SIMULINK сможет использовать.

Все доступные VRML узлы будут представлены в иерархическом порядке, иными словами в виде иерархического дерева(узлы могут быть и вложенными) . Также можно указать степень свободы для управления из SIMULINK. После закрытия диалогового окна Block Parameters SIMULINK изменит праметры блока вместе со входами и выходами в соответствии с выделенными узлами виртуального мира. После того как такие входы преобразуются в соответствующие SIMULINK сигналы можно будет наблюдать полученную сцену в VRML-браузере.

Т.е. SIMULINK дает средства для управления и манипуляции объектами виртуальной реальности с использованием блоков предоставляемых VR Toolbox.

VRML-браузеры

Как уже было сказано VR Toolbox содержит встроенный браузер(браузер по умолчанию) для просмотра виртуальных миров. Этот браузер поддерживается на PC,UNIX, MAC OS X, и Linux платформах. Если вы работаете на PC платформе, то можете установить VRML plug-in к вашему WEB-браузеру и пользоваться им. Для PC платформ VR Toolbox включает plug-in blaxxun Contact . Это единственный поодерживаемый VRML plug-in.

Если вы установили VRML plug-in, то для отображения процесса моделирования VR Toolbox устанавливает связь MATLAB и SIMULINK с активным VRML-браузером используя протокол TCP/IP. Такой подход позволяет просматривать процесс моделирования не только с локального узла, где были запущены MATLAB и SIMLINK, но и с любого удаленного узла через интернет-соединение.

VRML-редакторы

VRML-редакторы - это редакторы, использующиеся для создания 3D сцен с помощью языка VRML.

  • PC платформы - V-Realm Builder v2.0, поставляемый вместе в VR Toolbox. Если не хотите его использовать, то пользуйтесь своим любимым VRML-редактором(Я, например, предпочитаю VRMLPad) Установить редактор можно командой vrinstall . Как пользоваться V-Realm Builder"ом я расскажу в следующих статьях.
  • UNIX/LINUX платформы - редактор по умолчанию для них это редактор MATLAB. Здесь опять та же ситуация. Если не нравится измените свойство Editor на свой любимый текстовый редактор.

Поддержка SimMechanics

VR Toolbox также можно использовать для исследования поведения модели созданной с помощью SimMechanics. Сначала создаете модель механизма в SIMULINK используя блоки SimMechanics. Затем создаете детальную ее картину в виртуальном мире. Затем подключаете созданный мир к выходному элементу SimMechanics и смотрите как ведет себя соответствующая часть(или части) созданной системы в VRML-браузере.

Поддержка клиент-серверной архитектуры

Как уже было сказано VR Toolbox подключает MATLAB и SIMULINK к активному VRML-браузеру используя протокол TCP/IP. Сам Toolbox может быть использован в 2-х конфигурациях:

  • Один компьютер - SIMULINK, MATLAB и изображение сцены в виртуальном мире запущены на одном компьютере.
  • Сетевой компьютер - анимационная картинка с виртуальным миром просматривается, будучи запущенной на удаленном от компьютера на котором запущен VR Toolbox сервер узле. К этому одному серверу могут подключаться много клиентов. Изменять необходимые вам параметры вы можете и по сети.

Кратко о VRML

История VRML

С тех пор, как люди стали публиковать свои документы в World Wide Web(WWW), они все время пытались усилить эффект показом современных трехмерных сцен(лучше ведь один раз увидеть) , а также иметь возможность взаимодействовать с этой сценой(а еще лучше, если и пощупать) .

Сам же термин Virtual Reality Modeling Language(VRML) был озвучен Тимом Бернерсом Ли на Европейской Web конференции в 1994 году, где он заговорил о необходимости создания 3D Web стандарта. Вскоре после этого появилась активная группа инженеров и художников, которые приступили к работе над проектом www-vrml .Но потом они изменили название стандарта на Virtual Reality Modeling Language , чтобы подчеркнуть особую роль в нем графики. Результатом их усилий явилась спецификация VRML 1. В основу этой спецификации лег файловый формат изобретенный компанией Silicon Graphics(а точнее его часть) .

Стандарт VRML 1 был реализован в некоторых VRML-браузерах, но позволял создавать только статичные виртуальные миры. Это ограничение существенно мешало их широкому использованию. Довольно быстро стало очевидно, что язык нуждается в серьезной доработке, в добавлении возможностей анимации и интерактивности, в придаче виртуальному миру жизни. Так был создан стандарт VRML 2 и в 1997 году он был принят как интернациональный стандарт ISO/IEC 14772-1:1997 . С тех пор он известен как VRML97.

VRML97 предлагает открытую и гибкую основу для создания интерактивных трехмерных сцен (виртуальных миров) . Компьютеры постоянно наращивают свои вычислительные мощности и возможности работы с графикой, а линии связи становятся все быстрее, в свою очередь трехмерная графика уже стала невероятно популярной в компьютерных играх и современных видах искусства. Сейчас уже существует огромное колличество доступных VRML97-браузеров под различные платформы. Кроме того, наростает число авторских VRML-инструментов, коих уже богатый выбор. В добавок, много традиционных графических пакетов(CAD, visual art, и т.д.) предлагают возможномть экспорта/импорта моделей в формат VRML97.

Стандарт VRML97 продолжает развиваться консорциумом Web 3D. Новейший стандарт X3D (eXtensible 3D) явился наследником VRML97. X3D эластичный стандарт, который совместим и с текущим языком VRML и его браузерами. Для более детальной информации смотрите www.web3d.org

Координатная система VRML

В VRML используется правосторонняя Декартова координатная система. Для простоты рассмотрим большой, указательный и средний пальцы на правой руке человека. Пусть этот человек вы. Поставьте локоть правой руки на стол и зафиксируйте указанные пальцы перпендикулярно друг другу, держа ладонь и кисть на одной прямой. Большой палец - это ось x , указательный - ось y , средний - ось z .

Система координат VRML отличается от того, какая она в MATLAB. Эта разница легко видна из рисунка. Факт различия систем координат очень важно осознавать в ситуациях, когда приходится делать преобразования из одной из этих систем в другую. SimMechanics например использует координатную систему принятую в VRML.

Преобразования поворота - в VRML поворот происходит по правилу правого винта(как на рисунке) .

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

Все длины и дистанции измеряются в метрах, а все углы в радианах.

Формат VRML-файла

Для использования различных авторских инструментов по созданию виртуальных миров вовсе не требуются знания формата VRML файлов. Однако умение создавать простейшие 3D-сцены является весьма полезным. Эти знания помогут создавать виртуальные миры более эфективно и дадут понимание того как происходит управление виртуальным миром из VR Toolobox.

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

В VRML 3D сцена описываетя иерархической структурой(точнее деревом) объектов(узлов) . Каждый узел в дереве определяет часть функциональности сцены. Всего существуют 54 различных типа узлов. Некоторые из них представдяют собой геометрические узлы(реальные 3D объекты) . А некоторые представляют собой группирующие узлы и предназначены единственно для создания иерархии. Вот некоторые из них:

  • Узел(node) Box
  • Узел Transform - определяет позицию, масштаб, ориентацию, поворот, перенос всех дочерних элементов включенных в этот узел(группирующий узел) .
  • Узел Material(материал) - отвечает за материал на сцене
  • Узел DirectionalLight(направленный источник света) - отвечает за освещение сцены.
  • Узел Fog(туман) - позволяет изменять оптические свойства окружения
  • Узел ProximitySensor - придает интерактивность VRML97. Этот узел генерирует события активности пользователя(Enter,Exit,Moves)

Каждый перечисленный узел содержит поля, значения которых определяют функциональность каждого из них.

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

Каждому узлу можно присвоить уникальное имя, для чего используется ключевое слово DEF. Например, DEF MyNodeName Box задает имя MyNodeName для узла Box. Доступ к полям улов возможет только по их именам.

Приведу пример описанный в документации к VR Toolbox. На 3D сцене имеются два графических объекта: Сцена изображает некий, если хотите - пол, узлом Box и красный шарик над ним. Напишите в своем VRML-редакторе (или же в любом текстовом) следующий код.

Итак что же представляет из себя этот код? Первая строчка - заголовок, яволяется обязательной и показывает какую версию языка VRML вы используете(тут v2.0) и в какой кодировке написан текст(тут utf8) . Вообще говоря, кодировка utf8 описана в стандарте как обязательная и поддерживается любым VRML-браузером. Значок (#) используется для обозначения комментария везде, за исключением первой строки - заголовка. Напрмер, как видно и написано - вторая строчка это уже обычный комментарий и при интерпритации все написанное после символа (#) игнорируется.

Узел WorldInfo содержит информацию о созданном мире. В данном случае описан только один параметр заголовок(title) . Он используется VRML браузерами для того чтобы различать различные виртуальные миры. Узел ViewPoint является описанием месторасположения камеры. В данном случае в поле позиция(position) определена точка на 3D сцене в которой будет расположена камера.

Значения полей узла Box как видно, в большинстве своем оставлены по умолчанию. Например, дистанция от центра координатной системы, материал, цвет и так далее. Узлу лишь присвоено имя - Floor и присвоены размеры(длина, ширина, высота). Для того чтобы иметь возможность изменять позицию и остальные свойства нашего шарика он определен как дочерний узео узла Transform . Здесь стандартной сфере(значения всех полей по умолчанию) присвоена позиция - 10 метров от пола и цвет материала задан как красный.

При отображении в VRML-браузере сцена будет выглядеть примерно так.



Загрузка...