VRML

1.Общие сведения(структура программы, простейший пример)
2
.Прототипы
3.Группирование объектов
4.Динамические объекты
5.Усложненный пример
6.Основные типы данных
7.Основные узлы и работа с ними

Динамические объекты

   В рассматриваемой ниже программе приведен пример реализации динамического объекта.

   Программа описывает куб, который в ответ на нажатие на нем левой клавиши мыши меняет на две секунды свой цвет.

#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сылки Софт (Скачать) О сайте
             
Hosted by uCoz