| |||||||||||||||||
|
1.Общие сведения(структура программы,
простейший пример) Динамические объектыВ рассматриваемой ниже программе приведен пример реализации динамического объекта. Программа описывает куб, который в ответ на нажатие на нем левой клавиши мыши меняет на две секунды свой цвет. #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 Взаимодействие объектов VRML осуществляется при помощи сообщений. Сообщения могут генерироваться пользователем, а так - же активными узлами. Сообщения пользователя генерируются при помощи узлов - сенсоров. В спецификации VRML определены несколько различных типов сенсоров, реагирующих на различные действия пользователя: Узлы - сенсоры не имеют визуальной части. Контроль сенсора распространяется только на объекты, находящиеся с ним в одной группе (в данном примере TouchSensor контролирует нажатия левой клавиши мыши только на кубе).В приведенном примере используется один из наиболее часто употребляемых сенсоров - TouchSensor { }.Помимо сенсоров сообщения могут генерироваться при помощи активных узлов. TimeSensor { } - класс, номинально принадлежащий к семейству сенсоров, но по сути являющийся активным элементом. Обеспечивает генерацию "временных импульсов" (по своим функциям чем - то напоминает тактовый генератор).cycleInterval - поле класса TimeSensor, задающее длительность работы данного узла (время, в течение которого генерируются "временные импульсы" с момента получения узлом сообщения об активации). Одним из семейств активных элементов являются интерполяторы. В общем, функция данного семейства узлов выглядит следующим образом: интерполятор должен в течение заданного промежутка времени с заданной периодичностью последовательно выбирать из таблицы заданные значения. ColorInterpolator { } - интерполятор, задающий последовательность значений типа SFColor (тип данных для описания цвета материала). key [ ] - поле, имеющееся у любого типа интерполяторов. Содержит в себе набор вещественных значений в промежутке [0,1]. Количество значений задается по мере необходимости. Данные значения являются относительными величинами, разбивающими временной интервал на отрезки заданной длины. Например, если есть запись key [0, 0.5, 1] - то это значит что весь временной интервал разбивается на два отрезка 0%-50% от заданного интервала и 50% - 100% от заданного интервала. 0,0.5,1 - конечные точки общего временного интервала (1 эквивалентна 100%, 0.5 - 50%, 0 - 0%). keyValue [ ] - поле, имеющееся у любого типа интерполяторов. Это поле содержит набор значений, определяемых типом интерполятора. Количество значений должно быть равно количеству конечных точек временного интервала. Итак, периодичность выборки значений определяется значениями поля key, а сами значения задаются полем keyValue. Варьируя длины временных отрезков (значения поля key) можно добиваться равномерной или неравномерной выборки заданных значений с течением времени.
|
||||||||||||||||
Главная | Введение | Язык VRML | VRML 97 | Cсылки | Софт (Скачать) | О сайте |