Розробка VRML - документiв. Мова VRML (Virtual Reality Modeling Language). Інструментарій. Основні принципи, страница 4

#VRML V2.0 utf8 

#опис прототипу кулі 

PROTO MySphere [    field SFVec3f trans 0 0 0    field SFFloat radius 1    field SFColor color 1 1 1 

] {    Transform {      translation IS trans 

children [        Shape { 

appearance Appearance {            material Material {              diffuseColor IS color 

geometry Sphere {            radius IS radius 

#опис прототипу паралелепіпеда 

PROTO MyBox [ 

field SFVec3f trans 0 0 0    field SFColor color 1 0 1    field SFVec3f size 1 1 1 

] {    Transform {      translation IS trans 

children [        Shape { 

appearance Appearance {            material Material {              diffuseColor IS color 

}            }          geometry Box {            size IS size 

#опис групи об'єктів, яка складається з кулі та паралелепіпеда.

Transform {    children [      Group {        children [          MySphere {            trans 1 2 3            color 1 0.5 0            radius 2            }          MyBox {            trans -5 3 0            size 1 2 3 

}

Динамічні об'єкти

Взаємодія об'єктів VRML здійснюється за допомогою повідомлень. Повідомлення можуть генеруватися користувачем, а також активними вузлами

Повідомлення користувача генеруються за допомогою вузлів - сенсорів

У специфікації VRML визначені кілька різних типів сенсорів, що реагують на різні дії користувача. 

Вузли - сенсори не мають візуальної частини. Контроль сенсора поширюється тільки на об'єкти, що знаходяться з ним в одній групі (у даному прикладі TouchSensor контролює натискання лівої клавіші миші тільки на кубі). 

Крім сенсорів повідомлення можуть генеруватися за допомогою активних вузлів

TimeSensor { } - клас, що номінально належить до сімейства сенсорів, але по суті є активним елементом. Забезпечує генерацію "часових імпульсів" (за своїми функціями чимось нагадує тактовий генератор). 

cycleInterval - поле класу TimeSensor, що задає тривалість роботи даного вузла (час, протягом якого генеруються "часові імпульси" з моменту одержання вузлом повідомлення про активацію). 

Одним із сімейств активних елементів є інтерполятори. Звичайно інтерполятори мають два взаємозалежних поля key та keyValue.  z key [ ] - поле, що є у iнтерполяторi будь-якого типу. Мiстить у собi набiр рацiональних значень у промiжку [0,1]. Кiлькiсть значень задається залежно вiд необхiдностi. Данi значення є вiдносними величинами, що розбивають часовий iнтервал на вiдрiзки заданої довжини. Наприклад, якщо є запис key [0, 0.5, 1] - це означає, що весь часовий iнтервал розбивається на два вiдрiзки 0%-50% вiд заданого iнтервалу i 50% - 100% вiд заданого iнтервалу. 0, 0.5, 1 - кiнцевi крапки загального часового iнтервалу (1 еквiвалентна 100%, 0.5 - 50%, 0 - 0%).  z keyValue [ ] - поле, що є у iнтерполяторi будь-якого типу. Це поле мiстить набiр значень, обумовлених типом iнтерполятора. Кiлькiсть значень повинна точно дорiвнювати кiлькостi кiнцевих точок часового iнтервалу. 

Загалом, функція вузлів даного сімейства виглядає у такий спосіб: інтерполятор повинен протягом заданого проміжку часу з заданою періодичністю, залежно від поля key, послідовно вибирати з таблиці keyValue задані значення. 

Отже, періодичність вибірки значень визначається значеннями поля key, а самі значення задаються полем keyValue. Варіюючи довжини часових відрізків (значення поля key) можна домагатися рівномірної чи нерівномірної вибірки заданих значень з часом. 

ColorInterpolator { } - iнтерполятор, що задає послiдовнiсть значень типу SFColor (тип даних для опису кольору матерiалу). 

Опис шляхів трансляції повідомлень здійснюється за допомогою операторів ROUTE і TO. Загальний вигляд: 

ROUTE джерело_повідомлення TO приймач_повідомлення 

Тип джерела повідомлення повинен збігатися з типом приймача повідомлення. 

Примітка: опис типів повідомлень, властивим різним групам об'єктів приводяться в додатку.