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

У розглянутій нижче програмі наведений приклад реалізації динамічного об'єкта. 

Програма описує куб, що у відповідь на натискання на ньому лівої клавіші миші змінює на дві секунди свій колір.

#VRML V2.0 utf8 

#опис куба з вбудованим сенсором. 

Transform {    children [      Shape { 

appearance Appearance {          material DEF Mat Material {            diffuseColor 0 0 1 

}          }        geometry Box {          size 2 2 2 

DEF TOUCH TouchSensor {} 

#опис таймера 

DEF TIMER TimeSensor {    cycleInterval 2.0 

#опис інтерполятора кольорів 

DEF Blick ColorInterpolator {    key [0, 0.35, 0.7, 1] 

  keyValue [0.4 0.4 1, 0.8 0.8 1, 0.4 0.4 1, 0 0 1]

#опис шляхів трансляції подій 

ROUTE TOUCH.touchTime TO TIMER.startTime 

ROUTE TIMER.fraction_changed TO Blick.set_fraction 

ROUTE Blick.value_changed TO Mat.diffuseColor

Розглянемо шлях трансляції повідомлень у наведеному прикладі. 

Тут використовується один з найбільше часто уживаних сенсорів - TouchSensor { }

У момент натискання лівої клавіші мишки TouchSensor виробляє подію touchTime. Ця подія переправляється об'єкту TimeSensor, і надходить на вхід startTime. Після одержання цього повідомлення TimeSensor починає виробляти "імпульси часу". Це продовжується протягом періоду часу, заданого у полі cycleInterval (у даному випадку дві секунди). TimeSensor виробляє повідомлення fraction_changed, що подається вузлу ColorInterpolator на вхід set_fraction. Інтерполятор починає видавати повідомлення value_changed, що містять значення, зазначені у полі keyValue. Цей процес відбувається з заданою періодичністю протягом часу роботи вузла TimeSensor (у даному випадку - 2 секунди). Значення value_changed подаються обраному об'єкту (у даному випадку - куб), змінюючи значення поля даних відповідного типу. 

У наведеному прикладі значення поля diffuseColor змінюється п'ять разів протягом двох секунд. 

У такий спосіб був створений ефект мерехтіння в результаті натискання на об'єкті лівої клавіші мишки. 

Ускладнений приклад

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

Даний приклад демонструє переміщення об'єкта (у даному випадку - кулі) у чотирьох напрямках як результат натискання на відповідні керуючі елементи (стрілки).

#VRML V2.0 utf8 

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

PROTO Pointer [ 

exposedField SFVec3f translation 0 0 0    exposedField SFRotation rotation 0 0 1 0 

] {    Transform { 

translation IS translation      rotation IS rotation      children [        Transform {          children [            Shape { 

appearance Appearance {                material Material {                  diffuseColor 0 1 0 

}                } 

geometry Cylinder {                height 3                radius 0.5 

}        Transform {          translation 0 2 0          children [            Shape { 

appearance Appearance {                material Material {                  diffuseColor 0 1 0 

}                } 

geometry Cone {} 

#опис чотирьох стрілок 

Group {    children [      Pointer { 

translation 22 -20 0        rotation 0 0 1 -1.57 

DEF Right TouchSensor {} 

}  Group {    children [      Pointer { 

translation 18 -20 0        rotation 0 0 1 1.57 

DEF Left TouchSensor {} 

}  Group {    children [      Pointer {        translation -20 22 0 

DEF Up TouchSensor {} 

}  Group {    children [      Pointer {        translation -20 18 0        rotation 0 0 1 3.14 

DEF Down TouchSensor {} 

#опис кулі 

DEF Ball Transform {    children [      Shape {        appearance Appearance {          material Material {            diffuseColor 0.5 0.2 0.8