У розглянутій нижче програмі наведений приклад реалізації динамічного об'єкта.
Програма описує куб, що у відповідь на натискання на ньому лівої клавіші миші змінює на дві секунди свій колір.
#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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.