Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углублённый курс, по 4 часа в неделю)



Уроки 129 - 132
Язык VRML
(§74. Язык VRML)




Содержание урока

Язык VRML

Вопросы и задания

Задачи


Язык VRML


Как вы уже знаете, трёхмерные сцены хранятся в компьютере как векторные изображения. Каждый объект в векторном формате задаётся координатами своих вершин и свойствами (например, характеристиками материала). Эти данные могут храниться во внутреннем («машинном») представлении, однако для ручной обработки (и для передачи через Интернет) удобнее, если ЗБ-модель представляет собой обычный текст без оформления (англ. plain text).

В этом параграфе мы кратко познакомимся с языком VRML (Virtual Reality Modeling Language — язык моделирования виртуальной реальности), который позволяет сохранить трёхмерную сцену в текстовом файле и потом просматривать её в специальной программе или в веб-браузере (с помощью дополнительного модуля — плагина). Язык VRML «понимают» многие программы трёхмерного моделирования, в том числе системы автоматизированного проектирования (САПР). С помощью VRML сделаны виртуальная экскурсия по мемориалу на Мамаевом кургане 1, виртуальный выставочный центр на сайте www.3dexpo.ru и ЗБ-модели исторических событий (например, полета в космос Юрия Гагарина) на сайте фирмы Parallel Graphics 2.


1 http://www .Volgograd, ru/mamayev-kurgan/

2 http://www.parallelgraphics.com/products/showroom/event/



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

Трёхмерную сцену в VRML называют миром (англ. world), поэтому VRML-файлы имеют расширение wrl. Это обычные текстовые файлы, которые можно редактировать в любом текстовом редакторе. Кроме того, существуют специальные VRML-редакторы, например WhiteDune 3.

Для просмотра VRML-моделей нужно установить соответствующий плагин к браузеру (например, Cortona3D Viewer 4) или самостоятельное приложение (например, кроссплатформенную программу view3dscene 5).


3 http://vrml.cip.ica.uni-stuttgart.de/dune/

4 http://www.cortona3d.com/cortona

5 http://vrmlengine.sourceforge.net/view3dscene.php



Построим с помощью VRML трёхмерную модель комнаты. Её стены (а также пол и потолок) можно представить в виде плит (блоков, параллелепипедов). Пусть длина каждой стены — 4 м, высота — 3 м, а толщина — 0,1 м. Тогда стена в плоскости XOY (рис. 9.59) описывается так:

#VRML V2.0 utf8
Shape
{
geometry Box { size 430.1 }
}

Рис. 9.59

Рис. 9.59

В первой строке указана версия языка VRML (2.0) и кодировка текста (utf-8 — это один из вариантов UNICODE). У единственного безымянного объекта Shape (англ. shape — форма, фигура) задано только одно свойство — geometry (геометрия). Слово Box означает, что эта фигура — параллелепипед («коробка»), его размеры (по осям X, Y и Z соответственно) указаны после слова size (размер).

Объекты сцены в VRML называются узлами. Названия классов объектов начинаются с заглавной буквы, а названия свойств (полей) — со строчных. В нашем примере объект класса Shape имеет поле geometry, определяющее форму тела. Значение этого поля — объект класса Box (параллелепипед) 6. Узел Box, в свою очередь, имеет поле size, определяющее размеры плиты по каждой координатной оси.


6 Каждому объекту можно присвоить собственное имя, но делать это не обязательно.



Кроме параллелепипедов в языке VRML есть объекты других классов, например Sphere (шар), Cylinder (цилиндр), Cone (конус). Более сложные фигуры строятся из отдельных граней.

Объекты VRML имеют довольно много полей. Если значение поля не указано, используется некоторое стандартное значение (значение по умолчанию). Например, по умолчанию тело располагается так, чтобы его центр совпадал с началом координат, и равномерно «покрашено» в белый цвет.

Приведённый выше VRML-код можно записать в файл (назвав его, например, first.wri) и загрузить в программу-просмотрщик. При этом мы не просто увидим объёмную стену, но и сможем «походить» вокруг неё. В программе view3dscene это будет выглядеть так, как показано на рис. 9.60.

Рис. 9.60

Рис. 9.60

Программа должна выполнять рендеринг для загруженной трёхмерной модели очень быстро, поэтому качество картинки будет существенно хуже, чем в профессиональных программах 3D-моделирования типа Blender или 3ds Мах.

В нашем файле точка наблюдения не задана, и программа самостоятельно выбирает её (по умолчанию). Положение этой точки можно задать явно, добавив в VRML-файл код:

Viewpoint
{
position 005 }

Здесь свойство position (положение) объекта Viewpoint (точка наблюдения) определяет начальные координаты наблюдателя. В данном случае он находится в точке с координатами X = О, Y = 0 и Z = 5.

Существует несколько режимов просмотра трёхмерной сцены:

Examine (рассматривать, исследовать) — наблюдатель неподвижен, объект можно поворачивать и рассматривать под разными углами;
Walk (ходить, делать обход) — сцена неподвижна, а наблюдатель перемещается внутри неё «по поверхности земли»;
Fly (летать) — отличается от предыдущего режима «выключенной» силой тяжести.

Кнопка Collisions (столкновения) определяет, может ли наблюдатель проходить сквозь стены и предметы (если она отключена, то может).

Чтобы придать стене более реальный вид, надо заполнить у объекта Shape еще одно поле — appearance («внешность», «наружность»), отвечающее за то, как объект выглядит. Все свойства, влияющие на внешний вид объекта, собраны в единый объект с именем Appearance. Зададим для стены материал (свойство material объекта Appearance) и установим для этого материала цвет (свойство diffuseColor):

#VRML V2.0 utf8
Shape
{
geometry Box { size 4 3 0.1 } 
appearance Appearance
{
material Material { diffuseColor 0.7 0.7 0.7 }
}
}

Числа после названия свойства diffuseColor задают цвет стены в виде трёх составляющих модели RGB — красной, зелёной и синей, каждая из которых принимает значение от 0 до 1 (это соответствует диапазону от 0 до 255 при целочисленном RGB-кодировании цвета). В данном случае все они равны 0,7 — это светло-серый цвет.

Вместо того чтобы «красить» стену, можно было «оклеить» её обоями, т. е. наложить рисунок (текстуру). Для этого нужно задать свойство texture (текстура):

#VRML V2.0 utf8
Shape
{
geometry Box { size 4 3 0.1 } 
appearance Appearance {
texture ImageTexture { url["texture.png"] }
}
}

В данном случае текстура относится к классу ImageTexture (текстура-рисунок) и находится в файле texture.png в текущем каталоге. Рисунок растягивается на всю поверхность, поэтому его пропорции должны соответствовать соотношению размеров стены.

Остальные стены строятся аналогично, но с одним существенным отличием: их придётся смещать в пространстве (иначе по умолчанию их центр будет расположен в начале координат). Предположим, что созданная стена будет «дальней от нас». Тогда «левая» стена имеет размеры 0,1 х 3 х 4 м (по осям X, Y и Z соответственно), и её нужно передвинуть на 2,05 м влево вдоль оси X и на 1,95 м «в сторону наблюдателя» вдоль оси Z (величина 0,05 м — это половина толщины стены!).

Для перемещения объектов в виртуальном пространстве используется узел Transform (превращать, изменять). Он способен выполнять для присоединённых к нему узлов (перечисленных в списке children — «потомки», «подчинённые объекты») следующие действия (и любые их комбинации!):

translation (смещение) — смещение центра объекта вдоль каждой из трёх осей координат;
rotation (вращение, поворот) — поворот объекта вокруг трёх осей координат;
scale (изменение масштаба) — умножение размеров объекта на коэффициенты, отдельно по каждой оси.

В нашем случае требуется только перемещение. В список children (он записывается в квадратных скобках) мы включим одну фигуру (объект Shape) — параллелепипед, изображающий левую стену. Этот код нужно добавить в конец VRML-файла:

Transform
{
translation -2.05 0 1.95 children [
Shape
{
geometry Box { size 0.134 }
}
]
}

Теперь вы можете самостоятельно построить «виртуальную комнату» целиком.

Следующая страница Вопросы и задания



Cкачать материалы урока






Наверх