En VRML2.0 disposem d'una eina molt potent: el Sensor de Temps ( TimeSensor). Aquest és un rellotge que podem utilitzar al nostre gust per tal de poder aprofitar el pas del temps com a motor per a moure objectes de lloc, canviar color a les coses, variar orientacions, etc.
Imaginem que volem que un objecte giri al voltant d'un dels seus eixos al anar passant el temps. Tenim un rellotge que en cada "tic-tac" podem definir que ens ajudi a variar alguna cosa del nostre entorn amb una certa freqüència. Si d'alguna manera poguessim redirigir el canvi de temps que hi ha hagut en el rellotge per tal de variar la rotacio de l'objecte, ja ho tindriem solucionat.
Un TimeSensor es basa en el rellotge real de sistema, mesurant el temps actual, en segons transcorreguts a partir de les 00:00 hores del 1er de gener del 1970.
Vejam alguns exemples de TimeSensor que fan diferents coses:
|
Exemple1: S'engega i fa un cicle de 5 segons.
|
Aquest TimeSensor s'engega en carregar-se l'entorn en el visualitzador i s'atura al cap de
5 segons. Un TimeSensor constantment dóna com a esdeveniment de sortida
(eventOut), la fracció de cicle que porta transcorregut. Això ho fa mitjançant
l'eventOut SFFloat fraction_changed que és un valor entre 0.0 i 1.0.
La durada del cicle es defineix en segons al exposedField SFTime cycleInterval que en
aquest cas hem posat a 5 segons. És a dir, el TimeSensor trigarà 5 segons en
passar de 0.0 a 1.0 el valor de fraction_changed. En haver transcorregut els 5 segons i,
per tant, haver arribat a 1.0 el valor de fraction_changed, el TimeSensor deixarà de
modificar el fraction_changed i per tant s'aturarà.
|
Exemple2: S'engega i va fent cicles de 5 segons.
|
Ara, en haver transcorregut els 5 segons i haver arribat a 1.0 el valor de fraction_changed, com que li hem dit que faci bucles amb el loop TRUE, tornarà a començar un altre cicle. Això ho anirà fent sense aturar-se fins que carreguem un altre cosa en el visualitzador.
Per tal de poder aprofitar el pas del temps que ens va donant el TimeSensor, cal
utilitzar els interpoladors que passem a veure tot seguit.
Interpoladors
La interpolació linial (que és la que utilitza VRML2.0) és un concepte matemàtic que permet definir dos punts (en qualsevol dimensió) i calcular un punt intermig sobre la recta que els uneix, a partir de dir quin tant per cent del recorregut entre els dos punts volem fer.
Per a saber què és un interpolador...
En VRML2.0 hi ha sis tipus d'interpoladors:
Per veure com funcionen començarem per l'interpolador de colors. El que volem
fer es que un objecte vagi canviant de color de forma gradual, començant pel vermell
i acabant en el verd. Tenim que segons la forma de definir colors en RGB (valors entre 0 i 1),
el vermell és el (1 0 0) i el verd és (0 1 0).
|
Aixi doncs definim el nostre interpolador de colors:
|
Amb aquesta definició, estem dient que volem que quan l'interpolador comenci (0% del trajecte, key=0) ens doni color vermell, keyValue=(1 0 0) i quan acabi (100% del trajecte, key=1) ens doni color verd, keyValue=(0 1 0).
L'interpolador el que haurà d'anar fent és anar canviant el valor de key poquet a poquet i en funció d'aquest valor anar calculant el valor del color de keyValue. Per exemple, quan key=0.5, el valor de keyValue=(0.5 0.5 0) que és una mena de groc.
Però no només es pot donar un tram d'interpolació. Podriem dir-li que
volem que comenci per vermell, que despres passi per verd, despres per blau i finalment torni
al vermell.
|
Ara tenim tres trams de canvi de color i per tant definim el nostre interpolador de colors
de la següent manera:
|
Amb aquesta definició, estem dient que volem que quan l'interpolador comenci (0% del trajecte, key=0) ens doni color vermell, keyValue=(1 0 0). Quan estigui a key=0.3 (aproximadament un terç del trajecte) ens doni color verd, keyValue=(0 1 0). Quan estigui a key=0.6 (aprox. dos terços) ens doni color blau, keyValue=(0 0 1) i quan acabi (100% del trajecte, key=1) ens doni color vermell de nou, keyValue=(1 0 0).
Així, si tenim definit un material que apliquem a un objecte, podem fer que l'interpolador vagi modificant el diffuseColor (veure Materials) d'aquest material i per tant ens vagi canviant el color de l'objecte al qual l'apliquem. D'alguna manera hem de connectar el canvi de color de l'interpolador al color del material.
Però, què és el que fa que l'interpolador vagi passant del valor inicial al final, de mica en mica? Doncs, el pas del temps del TimeSensor que hem vist a dalt. Aquí també d'alguna manera hem de connectar el canvi de temps del TimeSensor al canvi de tant per u de l'interpolador (és a dir, al key).
L'eina de connectar que necessitem són les "rutes" que hem vist al mòdul anterior. Vejam com
funcionaria tot el nostre exemple de l'objecte (un cub) que va canviant de color:
|
Exemple3: Cub canviant de color.
|
Analitzem que fa això:
De la mateixa manera que hem enllaçat un TimeSensor a un ColorInterpolator, ho
podem fer a qualsevol altre interpolador.
Exercicis proposats:
|
Per acabar vegeu aquestes dues propostes, una és la unió de la sínia i els cavallets, i
l'altra és una versió sofisticada de la sínia:
park.wrl i siniasof.wrl.