VRML - что дальше?
Дальше, если вам неинтересно и скучно писать VRML руками - закройте VrmlPad, и запустите ISB.
В нём вы сможете сделать такую же сцену не касаясь клавиатуры.
Да, и зачем вам такая сцена, попробуйте сделать сразу что-нибудь "крутое". Например, построить подводную лодку и отправить её в плавание по бескрайним просторам виртуальноко океана.
Что-нибудь вроде этого:
Как сделать такую сцену? Читайте здесь.
Если же ваша первая VRML сцена, построенная вручную, вдохновляет... нет, провоцирует вас сразу же её улучшить - то "оставайтесь с нами".
Прежде всего надо отметить, что конус получился какой-то невыразительный... "плоский". Это произошло от того, что мы определили только геометрию, и ничего не сказали об оптических свойствах материала.
Исправим этот недостаток:
Да, и зачем вам такая сцена, попробуйте сделать сразу что-нибудь "крутое". Например, построить подводную лодку и отправить её в плавание по бескрайним просторам виртуальноко океана.
Что-нибудь вроде этого:
Если же ваша первая VRML сцена, построенная вручную, вдохновляет... нет, провоцирует вас сразу же её улучшить - то "оставайтесь с нами".
Прежде всего надо отметить, что конус получился какой-то невыразительный... "плоский". Это произошло от того, что мы определили только геометрию, и ничего не сказали об оптических свойствах материала.
Исправим этот недостаток:
#VRML V2.0 utf8 Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } }
Что бы задать геометрию, полю geometry присвоено значение объекта Cone.
Что бы задать внешний вид, полю appearance присвоено значение объекта Appearance.
Объект Appearance обладает собственными полями, мы используем одно из них - material.
Ему присвоено значение объекта Material, и уже в нём мы используем поле diffuseColor, значение которого и определяет цвет конуса.
Цвет задаётся как комбинация трёх составляющих: красной (0), зелёной(0) и синей(1).
Теперь анимируем конус. Для этого надо:
- создать новый объект, отвечающий за геометрические трансформации;
- присвоить этому объекту имя;
- создать объект - генератор событий и поименовать его;
- создать объект - описывающий траекторию и поименовать его;
- и установить связи между этими объектами;
#VRML V2.0 utf8 Transform { children [ Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } } ] }
У объекта Shape нет полей, позволяющих менять его положение в пространстве,
поэтому приходиться надстраивать над ним специальный объект Transform.
Его можно вращать, двигать и масштабировать, а вместе с ним и конус.
Шаг 2:
Шаг 2:
#VRML V2.0 utf8 DEF main_TR Transform { children [ Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } } ] }
При помощи DEF мы присвоили объекту Transform уникальное имя "main_TR".
В VRML это необходимо, если мы хотим динамически изменять значения полей объекта, например, вращать Transform.
Шаг 3:
Шаг 3:
#VRML V2.0 utf8 DEF main_TR Transform { children [ Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } } ] } DEF main_TIS TimeSensor { cycleInterval 3 loop TRUE }
Мы добавили в корень сцены новый объект TimeSensor.
Он послужит генератором событий, которые, в конце концов, приведут к вращению Transform-а.
Поле cycleInterval задаёт временной интервал цикла, а поле loop определяет будет ли этот цикл бесконечным.
Шаг 4:
Поле cycleInterval задаёт временной интервал цикла, а поле loop определяет будет ли этот цикл бесконечным.
Шаг 4:
#VRML V2.0 utf8 DEF main_TR Transform { children [ Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } } ] } DEF main_TIS TimeSensor { cycleInterval 3 loop TRUE } DEF main_OI OrientationInterpolator { key [0, 0.5, 1] keyValue [1 0 0 0, 1 0 0 3.14, 1 0 0 6.28] }
Ещё один новый объект OrientationInterpolator.
Именно в нём заложена информация о траектории объекта.
В поле keyValue хранятся опорные координаты, между которыми OrientationInterpolator и будет, собственно, интерполировать.
А в поле key определяется относительная скорость перемещения объекта между опорными точками.
Ну, вот... всё готово, чтобы связать все эти объекты вместе.
Шаг 5:
В поле keyValue хранятся опорные координаты, между которыми OrientationInterpolator и будет, собственно, интерполировать.
А в поле key определяется относительная скорость перемещения объекта между опорными точками.
Ну, вот... всё готово, чтобы связать все эти объекты вместе.
Шаг 5:
#VRML V2.0 utf8 DEF main_TR Transform { children [ Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 0 1 } } } ] } DEF main_TIS TimeSensor { cycleInterval 3 loop TRUE } DEF main_OI OrientationInterpolator { key [0, 0.5, 1] keyValue [1 0 0 0, 1 0 0 3.14, 1 0 0 6.28] } ROUTE main_TIS.fraction_changed TO main_OI.set_fraction ROUTE main_OI.value_changed TO main_TR.rotation
При помощи конструкции ROUTE задаются маршруты следования событий в VRML-сцене.
В нашем случае от поля fraction_changed объекта TimeSensor-а к полю set_fraction OrientationInterpolator-а,
а от поля value_changed OrientationInterpolator-а к полю rotation объекта Transform-у.
Причём обязательно указывается уникальное имя объекта, ведь, например, Transform-ов в сцене может быть много.
Вот дерево нашей сцены:
А приблизительно так это выглядит в Cortona VRML client:
Ну вот, начало положено... Теперь вы можете углублять свои познания VRML и накапливать опыт в построении виртуальных миров.
Главное пособие - спецификация VRML97:
http://www.web3d.org/x3d/specifications/vrml/ISO_IEC_14772-All/index.html
Непременно посмотрите материалы раздела VRML- подробнее.
Посетите раздел VRML ресурсы, там вы найдёте ссылки на другие "кладези знаний" в Internet.
Причём обязательно указывается уникальное имя объекта, ведь, например, Transform-ов в сцене может быть много.
Вот дерево нашей сцены:
Ну вот, начало положено... Теперь вы можете углублять свои познания VRML и накапливать опыт в построении виртуальных миров.
Главное пособие - спецификация VRML97:
http://www.web3d.org/x3d/specifications/vrml/ISO_IEC_14772-All/index.html
Непременно посмотрите материалы раздела VRML- подробнее.
Посетите раздел VRML ресурсы, там вы найдёте ссылки на другие "кладези знаний" в Internet.
дата обновления документа: