250 likes | 468 Views
Мултимедия и основи на уеб дизайна. а с.Елена Първанова. Създаване на анимации във VRML. Представяне на 3D сцена в WWW. 2011. ТЕМА 1 6. Събития във VRML. VRML 2.0 предоставя възможност за анимиране на обекти, реагиращи на потребителските действия.
E N D
Мултимедия и основи на уеб дизайна ас.Елена Първанова Създаване на анимации във VRML. Представяне на 3D сцена в WWW. 2011 ТЕМА 16
Събития във VRML • VRML 2.0 предоставя възможност за анимиране на обекти, реагиращи на потребителските действия. • Във VRML 2.0 при генерирането на събитие някои полета на възлите се промнят със зареждане на сцената. • Тези полета са exposed fields (открити полета) и те могат да бъдат получени когато потребителя наблюдава сцента. • Exposed fieldможе да бъде разложено на три части: • eventInset_fieldName • field fieldName • eventOutfieldName_changed , където fieldName може да бъде някое exposed fieldот синтаксиса на представените възли (удебелени) в предишните лекции.
Събития във VRML • Освен това възлите могат да имат и други eventInилиeventOutполета. • Понякога тези полета не са представени в дефиницията на възела. • Някой от възлите имат само eventIn дефиниция. • Когато се изпраща събитие към възела има два начина да се прихване събитието генерирано за възела чрез: ROUTES и скрипт. • Декларацията на поле като exposedозначава, че възела може да получава събития, eventIn и генерира събития, eventOut. • EventIn в exposed fieldсе използва, за да се зададе стойност на полето. • Когато тази стойност се промени, възела в който полето е дефинирано ще генерира съответно eventOut.
ROUTES Синтаксис ROUTE Node.eventOut_changed TO Node.set_eventIn • ROUTES (пътищата) са начин за дефиниране на път между генерирано събитие във възел и възел получващ събитие.
сензори във VRML Генериране на събития базирани на таймери и потребителски действия • Timers - генерира събития в определени интервали • Touch Sensors – генерира събитие когато курсорът посочва обекти от група към която е сензора • Visibility Sensors - генерира събитие, когато фигури в група със сензора са видими за потребителя • Dragging Sensors - генерира събитие когато потребителя кликва с мишката и премества обекти в група със сензора • Proximity Sensors– генерира събитие, когато потребителя е в определено пространство
сензори във VRML TimeSensor Node Синтаксис TimeSensor { cycleInterval1.0 enabled TRUE loop FALSE startTime0 stopTime0 } • TimeSensor node действа като часовник, който генерира събития. • Храктеризира се със следните полета: • enabled– определя състоянието на сензора; • startTime - определя кога сензора започва да генерира събития; • stopTime- определя кога сензора спира да генерира събития; • cycleInterval- определя броя на секундите за които TimeSensor ще генерира събития; • Loop- определя дали cycleInterval ще свърши или започне отново.
сензори във VRML TouchSensor Node Синтаксис TouchSensor { enabled TRUE } • Дефинира се в група и афектира върху всички фигури в групата. • Сензора предизвиква реакция, когато се кликне с мишката върху фигура съдържаща се в групата. Пример • DEF ga Group { • children [ • DEF sa Shape ... • DEF taTouchSensor {} • DEF gb Group { • children [ • DEF sb Shape ... • DEF tbTouchSensor {} • ] • } • ] • }
сензори във VRML VisibilitySensor Node Синтаксис VisibilitySensor { enabled TRUE center 0 0 0 size 0 0 0 } • VisibilitySensor node се използва улавяне на видими промени във виртуален куб (пространство), генерирайки събития когато видимия статус се промени. • Сензорът не е свързан с фигурите дефинирани в същата група с него. • Представя се със следните полета: • center - център на правоъгълния куб; • size - размери на правоъгълния куб; • enabled– определя състоянието на сензора; • Сензора генерира следните събития: • enterTime - извежда времето когато куба стане видим; • exitTime- извежда времето когато куба спре да бъде видим; • isActive- извежда TRUE когато куба стане видим и FALSE когато е обратното.
Пример за VisibilitySensor Код #VRML V2.0 utf8 Group { children [ DEF vsVisibilitySensor { size 1 1 1 } Sound { source DEF ac AudioClip { loop FALSE url "sfx.mid" } } Shape { geometry Box { size 1 1 1 } } ] } ROUTE vs.enterTime TO ac.set_startTime
сензори във VRML Dragging Sensors Представените сензори се храктеризират със следните полета: enabled- определя състоянието на сензора; offset- показва първоначалната позиция на фигурите във групата. Нулев offset означава, че фигурите ще бъдат преместени от тяхната първоначална позиция. Ако autoOffsetе TRUE offset стойността се игнорира. autoOffset - определя дали ще има постъпково преместване или отностно от първоначалната позиция. isActive– показва дали преместването е извършено; trackPoint– осигурява конкретни координати в пространството дефинирани от сензора; rotation_changed и translation_changed– осигуряват съответното завъртане и преместване. • Три типа dragging сензори има: • PlaneSensor: позволяват на потребителя да мести обектите в XY равнина; • CylinderSensor: ограничва местенето на обектите в рамките на цилиндър; • SphereSensor: ограничва местенето на обектите в рамките на сфера.
сензори във VRML PlaneSensor Node Пример #VRML V2.0 utf8 Group { children [ DEF tsPlaneSensor { minPosition -1 -1 maxPosition 1 1 } DEF tr Transform { children Shape { geometry Cylinder {} } } ] } ROUTE ts.translation_changed TO tr.set_translation Синтаксис PlaneSensor { enabled TRUE offset 0 0 0 autoOffset TRUE maxPosition -1 -1 minPosition 0 0 } • Възела генерира следните събития: • isActive(булева стойност) • translation_changed(3D вектор) • trackPoint_changed (3D точка)
сензори във VRML SphereSensor Node Пример #VRML V2.0 utf8 Group { children [ DEF ssSphereSensor {} DEF tr Transform { children Shape { geometry Box {} } } ] } ROUTE ss.rotation_changed TO tr.set_rotation SphereSensor { enabled TRUE offset 0 1 0 0 autoOffset TRUE } • Възела генерира следните събития: • isActive(булева стойност) • rotation_changed(3D вектор плюс ъгъл) • trackPoint_changed (3D точка) Синтаксис
сензори във VRML CylinderSensor Node Пример #VRML V2.0 utf8 Group { children [ DEF csCylinderSensor { minAngle 0 maxAngle 1.57 } DEF tr Transform { children Shape { geometry Cylinder {} } } ] } ROUTE cs.rotation_changed TO tr.set_rotation Синтаксис CylinderSensor { enabled TRUE offset 0 autoOffset TRUE maxAngle -1 minAngle 0 diskAngle0.262 } • Възела генерира следните събития: • isActive(булева стойност) • rotation_changed(3D вектор плюс ъгъл, по Y ос) • trackPoint_changed (3D точка)
сензори във VRML ProximitySensor Node Синтаксис ProximitySensor { enabled TRUE center 0 0 0 size 0 0 0 } • Този сензор генерира събития, когато потребителя влиза, напуска или се движи в дефинирано пространство (паралепипед). • Сензора съдържа следните полета: • enabled– определя състоянието на сензора; • center– определя центъра на паралелепипеда; • size – размер на паралелепипеда.
сензори във VRML Примерза ProximitySensor Код #VRML V2.0 utf8 Group { children [ DEF psProximitySensor { size 4 4 4} DEF slSpotLight { on FALSE location 0 0 4 } Shape { appearance Appearance { material Material {} } geometry Sphere {} } ] } ROUTE ps.isActive TO sl.set_on
Интерполатори • Видове интерполатори: • ColorInterpolator • CoordinateInterpolator • NormalInterpolator • OrientationInterpolator • PositionInterpolator • ScalarInterpolator • Интерполаторите дефинират key(ключ) с обхват от 0.0 до 1.0 към keyValue(стойност), която може да приеме различни типове данни в зависимост от интерполатора. • Всички събития и полета са еднакви за интерполаторите, само типа на данните е различен.
Интерполатори ColorInterpolator Примери: ColorInterpolator { key [0 1 ] keyValue[1 0 0, 0 0 1 ] } ColorInterpolator { key [0 0.5 1 ] keyValue[1 0 0, 0 0 1, 0 1 0 ] } • ColorInterpolator nodeе интерполатор приема списък от RGB стойности в полето keyValue. Синтаксис: ColorInterpolator { key [ ] keyValue[ ] }
Интерполатори Пример за ColorInterpolator Код Group { children [ Shape { appearance Appearance { material DEF mat Material { diffuseColor 0 0 0} } geometry Sphere {} } DEF ciColorInterpolator { key [ 0 1 ] keyValue [ 1 0 0, 0 0 1] } DEF tsTimeSensor { cycleInterval 2 loop FALSE } ] } ROUTE ts.fraction_changed TO ci.set_fraction ROUTE ci.value_changed TO mat.set_diffuseColor
Интерполатори CoordinateInterpolator Пример #VRML V2.0 utf8 Group { children [ Shape{ appearance Appearance { material Material { }} geometry IndexedFaceSet { coord DEF co Coordinate { point [-1 -1 0, 1 -1 0, 1 1 0, -1 1 0 ] } coordIndex [0 1 2 3] } } DEF ciCoordinateInterpolator { key [0 0.5 1] keyValue [-1 -1 0, 1 -1 0, 1 1 0, -1 1 0, -1 -1 0, 1 -0.5 0, 1 0.5 0, -1 1 0, -1 -1 0, 1 -1 0, 1 1 0, -1 1 0] } DEF tsTimeSensor { cycleInterval 2 loop TRUE } ] } ROUTE ts.fraction_changed TO ci.set_fraction ROUTE ci.value_changed TO co.set_point • CoordinateInterpolator node е интерполатор който взема списък от 3D координатни стойности в полето keyValue. Синтаксис: CoordinateInterpolator { key [ ] keyValue[ ] }
Интерполатори NormalInterpolator Синтаксис: NormalInterpolator { key [ ] keyValue [ ] } • NormalInterpolator nodeе интерполатор, който взема списък от 3D вектори в полето keyValue. • Позволява да се контролират всички перпендикуляри дефинирани в Normal node.
Интерполатори OrientationInterpolator Пример #VRML V2.0 utf8 DEF tr Transform { children [ Shape { appearance Appearance { material DEF mat Material { diffuseColor 1 0 0 } } geometry Sphere {} } DEF oiOrientationInterpolator { key [ 0 1 ] keyValue [ 0 1 0 0, 0 1 0 3.14, # rotate right 0 0 1 3.14] # rotate down } DEF tsTimeSensor { cycleInterval 2 loop TRUE } ] } ROUTE ts.fraction_changed TO oi.set_fraction ROUTE oi.value_changed TO tr.set_rotation • OrientationInterpolator nodeе интерполатор, който взема списък от стойности за ротация в полето keyValue. • Интерполатора анимира обекти, въртейки ги според стойностите в keyValue. Синтаксис: OrientationInterpolator { key [ ] keyValue[ ] }
Интерполатори PositionInterpolator Пример #VRML V2.0 utf8 DEF tr Transform { children [ Shape { appearance Appearance { material DEF mat Material { diffuseColor 1 0 0 } } geometry Sphere {} } DEF pi PositionInterpolator { key [ 0 1 ] keyValue [ 0 0 0, 0 1 0, 0 0 0] } DEF tsTimeSensor { cycleInterval 2 loop TRUE } ] } ROUTE ts.fraction_changed TO pi.set_fraction ROUTE pi.value_changed TO tr.set_translation • PositionInterpolator node е интерполатор, който взема списък от 3D координати в полето keyValue. • Използва се за анимиране на обекти, премествайки ги по път определен в keyValue. Синтаксис: PositionInterpolator { key [ ] keyValue[ ] }
Интерполатори ScalarInterpolator Пример #VRML V2.0 utf8 Group { children [ Shape { appearance Appearance { material DEF mat Material { diffuseColor 1 0 0 } } geometry Sphere {} } DEF ciScalarInterpolator { key [ 0 0.5 1 ] keyValue [ 0 1 0] } DEF tsTimeSensor { cycleInterval 2 loop TRUE } ] } ROUTE ts.fraction_changed TO ci.set_fraction ROUTE ci.value_changed TO mat.set_transparency • ScalarInterpolator node е интерполатор, който взема списък от стойности в keyValue. • Може да се използва за стойности на exposed field. Нпарипер: • Промяна на скоростта (филм и аудио); • Промяна на блясък и прозрачност (материал); • Промяна на видимия обхват (мъгла). Синтаксис: ScalarInterpolator { key [ ] keyValue[ ] }
Въвеждане на VRML сцена в web страница • За представянето на VRML сцена пострдством web страница е необходимо да се използва EMBEDилиOBJECT (поддържан от Microsoft Internet Explorer) елементи с подходящите атрибути в HTML документ. <object width="400" height="300" classid="clsid:660D0125-4C92-4EDD-B7B4B36857F1449E“codebase=http://www.octaga.com/freedownloads/OctagaPlayer/current/Setup.Exe#Version=2,3,0,0standby="Loading..."> <PARAM NAME="SRC“VALUE="http://www.octaga.com/vrml/venus/venus.wrl"> <PARAM NAME="pluginspage" VALUE="http://www.octaga.com/"> <embed type="application/octaga“name="Octaga" pluginspage ="http://www.octaga.com/start/start.php?startpage=download_octaga" width="400" height="300" src="http://www.octaga.com/vrml/venus/venus.wrl" SplashScreen="True" > </embed> </object>
Въвеждане на VRML сцена в web страница • Използване на OBJECT таг <OBJECT CLASSID="CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1" CODEBASE="http://www.cortona3d.com/bin/cortona3d.cab#Version=6,0,0,179" WIDTH="128" HEIGHT="128"> <PARAM NAME="SRC" VALUE="/vrml/splines/cube3scriptless.wrl"> <PARAM NAME="VRML_BACKGROUND_COLOR" VALUE="#CDCDCD"> <PARAM NAME="VRML_DASHBOARD" VALUE="false"> <PARAM NAME="VRML_SPLASHSCREEN" VALUE="false"> <PARAM NAME="CONTEXTMENU" VALUE="false"> </OBJECT> • Използване на EMBED таг <embed src="/vrml/splines/cube3scriptless.wrl" width="128" height="128" type="application/x-cortona" pluginspage="http://www.cortona3d.com/cortona" vrml_splashscreen="false" vrml_dashboard="false" vrml_background_color="#CDCDCD" contextmenu="false">