Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Простейшие сцены в виртуальном мире






Трехмерное моделирование и виртуальная реальность

Лабораторная работа № 6

Н.Н. Красильников, О.И. Красильникова

Изучение методов создания виртуального пространства

Методические указания

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

Виртуальное пространство и методы его описания

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

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

В алгоритмическом языке реализован объектный подход к изображениям. Файлы формата VRML, содержащие описание трехмерных сцен, имеют расширение wrl и представляют собой обычные текстовые файлы, которые можно создавать и редактировать посредством приложения Notepad (Блокнот) Windows. Так же, как и в языке C++, регистр символов в кодах VRML важен.

 

Простейшие сцены в виртуальном мире

Рассмотрим на простейшем примере принцип построения кода, описывающего геометрический объект, например сферический примитив Sphere01, расположенный в начале координат (см. Рис. 1).

 

#VRML V2.0 utf8

# Produced by 3D Studio MAX VRML97 exporter, Version 7, Revision 0, 65

# Date: Mon Aug 14 19: 56: 56 2006

 

DEF Sphere01 Transform {

translation 0 0 0

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0 1 0

}

}

geometry Sphere { radius 28 }

}

]

}

Рис.1

 

В этом примере строки, следующие после символа, # являются комментариями, причем первая строка - это заголовок одинаковый для всех файлов VRML.

Текст VRML кода состоит из операторов (statements). К ним относятся операторы-узлы (node statements). Операторы-узлы начинаются с необязательного слова DEF (definition), после которого следует его имя, в нашем примере Sphere01. К обязательным элементам узла относятся название его типа, в нашем примере Transform (Преобразование), и тело узла, которое заключается в фигурные скобки. Тело узла состоит из полей (fields). Каждое поле имеет свое имя и значение. В том случае если поле представляет собой массив, т.е. имеет несколько значений, то эти значения заключаются в квадратные скобки. В качестве значений полей могут быть новые узлы, имеющие свои поля.

В рассматриваемом примере в теле узла типа Transform (Преобразование), определяющем параметры преобразования геометрического объекта Sphere01, имеется поле translation (смещение), которое задает координаты положения центра сферы, а также поле children (потомки), которое, по определению, может иметь (но в данном примере не имеет) набор значений, заключаемых в квадратные скобки. В нашем примере единственным значением поля children (потомки) является узел Shape (Форма).

Узел Shape (Форма) определяет внешний вид объекта. Имеет два поля: appearance (внешность) и geometry (геометрия).

Значением поля appearance (внешность) является узел с именем Appearance (Внешность), у которого имеется единственное поле material (материал), определяющее материал геометрического объекта.

Значением поля материал является узел Material (Материал), имеющий единственное поле diffuseColor (диффузный цвет), которое определяет цвет диффузного рассеяния света на геометрическом объекте, в нашем примере на сфере. Значение цвета задается тремя компонентами вектора в колориметрической системе RGB. При этом имеется одна особенность. Интенсивность каждого цвета задается вещественной величиной, которая может изменяться не в привычных пределах от 0 до 255, а от 0 до 1. Например, красному цвету будет соответствовать код (1, 0, 0), серому (0.5, 0.5, 0.5), а белому (1, 1, 1). В нашем примере цвет задан числами 0 1 0, что соответствует зеленому цвету.

И, наконец, поле geometry (геометрия) узла Shape (Форма) определяет форму объекта. В рассматриваемом примере значением поля geometry (геометрия) является узел Sphere (Сфера), который определяет геометрический примитив в виде сферы имеющий единственный параметр radius (радиус), равный 28 метрам.

Аналогичным образом могут быть описаны другие геометрические примитивы: параллелепипед, цилиндр, конус. В этом случае вместо узла Sphere (Сфера), описывающего этот объект следует записать код другого примитива.

Так в случае параллелепипеда код его узла Box01имеет вид

 

DEF Box01 Transform {

translation 8.591 0 2.749

children [

Transform {

translation 0 18.56 0

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0.3451 0.3451 0.8824

}

}

geometry Box { size 60.48 37.11 54.3 }

}

] }

]

}

 

Здесь параметр size представляет собой геометрические размеры граней параллелепипеда в метрах: 60.48 - размер грани параллельной оси X, 37.11 - размер грани параллельной оси Y, и 11 54.3 - размер грани параллельной оси Z.

В случае цилиндра код узла Sphere { radius 28 } должен быть заменен на код узла цилиндра

Так в случае цилиндра код его узла Cylinder01имеет вид

 

DEF Cylinder01 Transform {

translation -15.46 0 1.718

children [

Transform {

translation 0 29.21 0

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0.1098 0.1098 0.6941

}

}

geometry Cylinder { radius 30.65 height 58.42 }

}

] }

]

}

 

Здесь параметр radius представляет собой радиус равный 30.65 метрам, а параметр height высоту цилиндра равную в рассматриваемом примере 58.42 метрам.

В случае конуса код его узла Cone01 имеет вид:

 

DEF Cone01 Transform {

translation -7.904 0 -1.718

children [

Transform {

translation 0 54.64 0

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 0.3451 0.5608 0.8824

}

}

geometry Cone { bottomRadius 71.62 height 109.3 }

}

] }

]

}

 

параметр bottomRadius представляет собой радиус основания, в данном примере равный 71.62 метрам, а параметр height высоту равную 109.3 метрам.

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.