[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программминг ~ Programming » Web_3D » VRML (Язык моделирования виртуальной реальности)
VRML
freedomurbanДата: Воскресенье, 26.10.2008, 20:43 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline

VRML
Материал из Википедии — свободной энциклопедии

VRML (англ. Virtual Reality Modeling Language — язык моделирования виртуальной реальности) — стандартный формат файлов для демонстрации трёхмерной интерактивной векторной графики, чаще всего используется в WWW.

Формат

VRML — это текстовый формат файлов, где, например, вершины и грани многогранников могут указываться вместе с цветом поверхности, текстурами, блеском, прозрачностью и так далее. URL могут быть связаны с графическими компонентами, таким образом, что веб-браузер может получать веб-страницу или новый VRML-файл из сети Интернет тогда, когда пользователь щёлкает по какому-либо графическому компоненту. Движение, звуки, освещение и другие аспекты виртуального мира могут появляться как реакция на действия пользователя или же на другие внешние события, например таймеры. Особый компонент Script Node позволяет добавлять программный код (например, Java или JavaScript (ECMAScript)) к VRML-файлу.

VRML-файлы обычно называются мирами и имеют расширение .wrl (например: island.wrl). Хотя VRML-миры используют текстовый формат они часто могут быть сжаты с использованием алгоритма компрессии gzip для того, чтобы их можно было передавать по сети за меньшее время. Большинство программ трёхмерного моделирования могут сохранять объекты и сцены в формате VRML.

Стандарты

Для дальнейшей коллективной разработки формата был создан консорциум Web3D.

Первая версия VRML была выпущена в ноябре 1994 года. Эта версия была основана на API и файловом формате программной компоненты Open Inventor, изначально разработанной в SGI. Текущая и функционально завершенная версия — VRML97 (ISO/IEC 14772-1:1997). Сейчас VRML вытесняется форматом X3D (ISO/IEC 19775-1).

Пример документа

#VRML V2.0 utf8
WorldInfo {
title "Red Sphere"
}
DEF Sphere1 Shape {
appearance Appearance {
material DEF Red Material {
ambientIntensity 0.200
shininess 0.200
diffuseColor 1 0 0
}
}
geometry DEF GeoSphere1 Sphere {
radius 1.000
}
}

 
freedomurbanДата: Воскресенье, 26.10.2008, 20:49 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
VRML в примерах
http://www.citforum.ru/internet/vrml/vrml_ex.shtml

Что такое VRML

Язык VRML (Virtual Realty Modelling Languagy) предназначен для описания трехмерных изображений и оперирует объектами, описывающими геометрические фигуры и их расположение в пространстве.

Vrml-файл представляет собой обычный текстовый файл, интерпретируемый браузером. Поскольку большинство браузеров не имеет встроенных средств поддержки vrml, для просмотра Vrml-документов необходимо подключить вспомогательную программу - Vrml-браузер, например, Live3D или Cosmo Player.

Как и в случае с HTML, один и тот же vrml-документ может выглядеть по-разному в разных VRML-браузерах. Кроме того, многие разработчики VRML-браузеров добавляют нестандартные расширения VRML в свой браузер.

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

Единицы измерения

В VRML приняты следующие единицы измерения:

* Расстояние и размер: метры
* Углы: радианы
* Остальные значения: выражаются, как часть от 1.
* Координаты берутся в трехмерной декартовой системе координат (см. рис.)

Заголовок VRML-файла

Как уже говорилось, Vrml-документ представляет собой обычный тестовый файл.

Для того, чтобы VRML-браузер распознал файл с VRML-кодом, в начале файла ставится специальный заголовок - file header:

#VRML V1.0 ascii

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

 
freedomurbanДата: Воскресенье, 26.10.2008, 20:57 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Примитивы VRML

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

Эти фигуры называются примитивами (primitives). Набор примитивов невелик, однако комбинируя их, можно строить достаточно сложные трехмерные изображения. Например, вот такие:

Рассмотрим поподробней каждый из примитивов.

Куб

Возможные параметры: width - ширина, height - высота, depth - глубина.

Cube {

width 2 # ширина

height 3 # высота

depth 1 # глубина

}

Сфера

Параметр у сферы только один, это radius.

Sphere {

radius 1 # радиус

}

Конус

Возможные параметры: bottomRadius - радиус основания, height - высота, parts - определяет, какие части конуса будут видны. Параметр parts может принимать значения ALL, SIDES или BOTTOM.

Cone {

parts ALL #видны и основание, и боковая поверхность конуса

bottomRadius 1 #радиус основания

height 2 #высота

}

Цилиндр

Для цилиндра можно задать параметры radius и height. Кроме того, с помощью параметра parts для цилиндра можно определить будут ли отображаться основания цилиндра и его боковая поверхность. Параметр parts может принимать значения ALL, SIDES, BOTTOM или TOP.

Cylinder {

parts ALL #видны все части цилиндра

radius 1 #радиус основания

height 2 #высота цилиндра

}

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:04 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Положение объектов в пространстве
Изменение координат

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

Узел Translation определяет координаты объекта:

Translation {

translation 1 2 3 #т.е. соответственно x=1 y=2 z=3

}

Вообще говоря, координаты указываемые в Translation не являются абсолютными. Фактически это координаты относительно предыдущего узла Translation. Чтобы прояснить это вопрос, рассмотрим пример:

#VRML V1.0 ascii

Cube {

width 1

height 1

depth 1

}

# Этот куб по умолчанию располагается в центре

Translation {

translation 2 0 0

}

#Второй куб сдвинут вправо на 2

Cube {

width 1

height 1

depth 1

}

Translation {

translation 2 0 0

}

#Третий куб сдвинут вправо на два относительно 2-го !!!!

Cube {

width 1

height 1

depth 1

}

Как видите, третий кубик вовсе не совпадает с первым, хотя в в узле Translation указаны те же координаты.

В VRML 1.0 принято следующее правило: узлы, модифицирующие свойства фигур (Translation, Material и т.п.), действуют на все далее описанные фигуры.

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

Separator

{

другие узлы

}

Узел Separator работает как контейнер, он может содержать любые другие узлы, и основным его предназначением является именно ограничение области действия узлов типа Translation и Material.

Сравните следующий пример с предыдущим:

#VRML V1.0 ascii

Separator {

Cube {

width 1

height 1

depth 1

}

}# конец области действия узла Separator

Separator {

Translation {

translation 2 0 0

}

#Второй куб сдвинут вправо на 2

Cube {

width 1

height 1

depth 1

}

}# конец области действия узла Separator

Separator {

Translation {

translation 2 0 0

}

#Третий куб сдвинут вправо на два относительно 1-го.

Cube {

width 1

height 1

depth 1

}

}# конец области действия узла Separator

Хотя в примере описано три кубика, мы видим только два, так как второй и третий совпадают.

Вообще говоря рекомендуется всегда и везде использовать узел Separator. Он не только избавит от ошибок, связанных с относительностью координат, но и сделает VRML-код более простым и понятным.

Вращение

Для вращения фигур вокруг осей координат применяется узел Rotation.

Rotation {

rotation 0 1 0 1.57

}

Первые три цифры определяет будет ли осуществлен поворот вокруг соответственно осей x, y и z, а четвертая задает угол вращения в радианах. В приведенном выше листинге поворот осуществляется вокруг оси y на 90 градусов.

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:05 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Углы в градусах Радианы
30 0.52
45 0.78
60 1.04
90 1.57
180 3.14
270 4.71

Составим букву T из двух цилиндров. По умолчанию цилиндр ориентирован вертикально (см. рисунок). Поэтому для успешного выполнения задачи повернем его вокруг оси z на 90 градусов.

#VRML V1.0 ascii

Separator { #Красный цилиндр

Material { emissiveColor 1 0.6 0.6 }

Cylinder {

height 1

radius 0.3

}

}

Separator { # Синий цилиндр, повернутый на 90 градусов вокруг оси z

Translation {

translation 0 0.5 0

}

Rotation {

rotation 0 0 1 1.57

}

Material { emissiveColor 0.5 0.5 1 }

Cylinder {

height 1

radius 0.3

}

}

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:09 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Масштабирование


Узел Scale масштабирует фигуры по одному или нескольким измерениям. Три цифры, стоящие после параметра scaleFactor определяют коэффициенты масштабирования относительно осей x,y и z.

Scale {

scaleFactor 1 1 1

}

В следующем примере, узел Scale сжимает сферу по оси x, и из сферы получается эллипсоид.

#VRML V1.0 ascii

Material { emissiveColor 1 1 0 }

Scale {

scaleFactor 0.7 1 1 #сжимаем сферу по оси x

}

Sphere { radius 1}

}

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:11 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Определение собственных объектов

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

Объект описывается одним из способов:

DEF name

Cube {}

или

DEF name

Material {}

или

DEF name

Separator {

Сгруппированные узлы, описывающие фигуру и свойства материала

}

Для того, чтобы вставить в VRML-файл ранее определенную фигуру, используется команда USE

Separator {

USE name

}

Создадим VRML-файл, описывающий стул, при этом ножку стула опишем как объект LEG:

#VRML V1.0 ascii

Material { emissiveColor 1 0.5 0.5 }

Separator {

Translation { translation 1 1 1 }

DEF LEG #Определяем объект - ножку стула

Separator { # leg

Cylinder {

height 0.8

radius 0.1

}

} # определили ножку

}

Separator {

Translation { translation 0 1 1 }

USE LEG # используем определенный объект

}

Separator { # еще одна ножка

Translation { translation 1 1 0 }

USE LEG

}

Separator { # последняя ножка

Translation { translation 0 1 0 }

USE LEG

}

Separator { # сиденье

Translation { translation 0.49 1.5 0.5 }

Cube {

height 0.2

width 1.2

depth 1.2

}

}

Separator { # спинка

Translation { translation 0.49 2 0 }

Cube {

height 0.8

width 1.2

depth 0.2

}

}

Separator { # закругление спинки

Translation { translation 0.49 2.1 0 }

Rotation {

rotation 1 0 0 1.57

}

Cylinder {

radius 0.6

height 0.2

}

}


Как видите, нам не понадобилось описывать каждую ножку в отдельности - в результате объем VRML-кода стал меньше, а сам код более читабельным.

Еще один способ уменьшить размер VRML-файла - вставлять фигуры из другого файла.

Это позволяет делать узел WWWInline:

#VRML V1.0 ascii

Separator {

WWWInline {

name ""

bboxSize 0 0 0

bboxCenter 0 0 0

}

}

Параметр name - это путь к файлу, параметры bboxSize и bboxCenter не обязательны и показывают пользователю размеры и положение вставляемого объекта, пока объект подгружается.

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:13 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline
Вместо заключения, хочется обратить Ваше внимание на две особенности VRML, незнание которых сильно затруднит создание VRML-документов вручную.

1. Все описания узлов и параметров в VRML регистрозависимы. Если Вы используете буквы неправильного регистра - то VRML-браузер просто проигнорирует такое описание.
2. В VRML имеет огромное значение порядок описания узлов. Так к примеру, описание

...

Rotation {...}

Scale {...}

...

и описание

...

Scale {...}

Rotation {...}

...

дают совершенно разный результат.

 
freedomurbanДата: Воскресенье, 26.10.2008, 21:16 | Сообщение # 9
Admin
Группа: Администраторы
Сообщений: 630
Репутация: 6
Статус: Offline

[size=12]VRML - информация для новичков и профессиональных

Харощее описание
http://vrml.org.ru/
[/size]
 
Форум » Программминг ~ Programming » Web_3D » VRML (Язык моделирования виртуальной реальности)
  • Страница 1 из 1
  • 1
Поиск: