Sensors de Visivilitat i Moviment

Tutorial de VRML97

Sensor de Visibilitat

Aquest sensor, tan sols serveix per qüestions d'optimització. Per exemple, si tenim molts elements en moviment en el nostre entorn, el rendiment de navegació pot ser força baix. Però si fem que els objectes només es moguin quan entren en el nostre camp de visió, millorarem el rendiment per que només es mourà allò que realment és necessari.

Aixó es pot fer, definint una zona en forma de caixa al voltant dels objectes. El sensor de visibilitat node VisibilitySensor ens permet definir aquesta caixa invisible, centrada en un cert punt. Quan aquesta caixa entra en el nostre rang de visió, llavors el sensor de visibilitat s'activa i emet un esdeveniment.

Exemple1: Sensor de visibilitat.

Transform {
	translation -5 8 3
	children Shape {
		geometry Sphere { radius 2 }
		appearance Appearance { ... }
	}
}

VisibilitySensor {
	center -5 8 3
	size 4 4 4
}

Tot i que aquest exemple no és funcional, ens mostra com definir la caixa de visibilitat al voltant d'un objecte. Com que l'esfera està centrada en el punt (-5 8 3) i té un radi de 2 unitats, llavors hem de centrar la caixa de visibilitat en el mateix punt i donar-li unes mesures de 4x4x4 per que englobi tota l'esfera.

NOTA: En el moment d'escriure el tutorial (01/97), el Cosmo Player no no implementa aquest sensor.

Sensors de Moviment

Aquests sensors permeten incidir sobre les translacions i rotacions d'objectes dirèctament i individualment, sense haver de modificar tota l'escena amb les interfícies del browser.

Hi ha tres tipus de sensors de moviment (o "drag sensors" com s'anomenen en anglès):

node PlaneSensor

Aquest sensor permet mapejar els moviments 2D del cursor de pantalla, en moviments 2D sobre el pla XY del sistema de coordenades del sensor. El sensor s'activa quan es pitja sobre l'objecte actiu i sense deixar anar el botó del ratolí, es mou el cursor. Llavors, els moviments del cursor es poden reflectir sobre l'objecte mitjançant un ROUTE. Vejam un exemple on un cub verd és l'objecte actiu, i tenim un cub taronja de referència inactiu.

Exemple1: Sensor de Moviment en un Pla.

Transform { # Cub de referencia
	translation -3 0 0
	children Shape {
		geometry Box { size 2 2 2 }
		appearance Appearance { 
			material Material { diffuseColor 0.7 0.3 0 }
		}
	}
}

Group {
	children [
		DEF Cub Transform {
			children Shape {
				geometry Box { size 2 2 2 }
				appearance Appearance { 
					material Material { diffuseColor 0 0.7 0.3 }
				}
			}
		}
		DEF PS PlaneSensor { }
	]
}

ROUTE PS.translation_changed TO Cub.translation

Observeu com aquest sensor es defineix de forma semblant al sensor de tacte vist el el mòdul anterior, és a dir, cal definir-lo com a "germà" dels objectes que han de ser actius.

A continuació veurem un exemple on el cub taronja és l'actiu, però el que es mou és el verd.

Exemple2: Sensor de Moviment en un Pla, on l'objecte actiu diferent al que es mou.

Group {
	children [
		Transform { # Cub actiu
			translation -3 0 0
			children Shape {
				geometry Box { size 2 2 2 }
				appearance Appearance { 
					material Material { diffuseColor 0.7 0.3 0 }
				}
			}
		}
		DEF PS PlaneSensor { }
	]
}

DEF Cub Transform { # Cub que es mou
	children Shape {
		geometry Box { size 2 2 2 }
		appearance Appearance { 
			material Material { diffuseColor 0 0.7 0.3 }
		}
	}
}

ROUTE PS.translation_changed TO Cub.translation

Com es pot observar, el mapeig fet amb el ROUTE no ha variat, però hem posat el sensor de moviment en el pla, agrupat amb l'altre cub (el taronja).

node CylinderSensor

Aquest sensor permet mapejar els moviments 2D del cursor de pantalla, en rotacions al voltant de l'eix Y del sistema de coordenades del sensor. El sensor s'activa quan es pitja sobre l'objecte actiu i sense deixar anar el botó del ratolí, es mou el cursor. Llavors, els moviments del cursor es poden reflectir sobre l'objecte mitjançant un ROUTE. Vejam l'exemple del cub verd modificat.

Exemple3: Sensor de Moviment Cilíndric.

Transform { # Cub de referencia
	translation -3 0 0
	children Shape {
		geometry Box { size 2 2 2 }
		appearance Appearance { 
			material Material { diffuseColor 0.7 0.3 0 }
		}
	}
}

Group {
	children [
		DEF Cub Transform {
			children Shape {
				geometry Box { size 2 2 2 }
				appearance Appearance { 
					material Material { diffuseColor 0 0.7 0.3 }
				}
			}
		}
		DEF CS CylinderSensor { }
	]
}

ROUTE CS.rotation_changed TO Cub.rotation

Observeu com aquest sensor es defineix de forma semblant al sensor de tacte vist el el mòdul anterior, és a dir, cal definir-lo com a "germà" dels objectes que han de ser actius.

NOTA: En el moment d'escriure el tutorial (01/97), el Cosmo Player no no implementa aquest sensor.

node SphereSensor

Aquest sensor permet mapejar els moviments 2D del cursor de pantalla, en rotacions al voltant de l'origen de coordenades. El sensor s'activa quan es pitja sobre l'objecte actiu i sense deixar anar el botó del ratolí, es mou el cursor. Llavors, els moviments del cursor es poden reflectir sobre l'objecte mitjançant un ROUTE. Vejam l'exemple del cub verd modificat.

Exemple4: Sensor de Moviment Esfèric.

Transform { # Cub de referencia
	translation -3 0 0
	children Shape {
		geometry Box { size 2 2 2 }
		appearance Appearance { 
			material Material { diffuseColor 0.7 0.3 0 }
		}
	}
}

Group {
	children [
		DEF Cub Transform {
			children Shape {
				geometry Box { size 2 2 2 }
				appearance Appearance { 
					material Material { diffuseColor 0 0.7 0.3 }
				}
			}
		}
		DEF SS SphereSensor { }
	]
}

ROUTE SS.rotation_changed TO Cub.rotation

Observeu com aquest sensor es defineix de forma semblant al sensor de tacte vist el el mòdul anterior, és a dir, cal definir-lo com a "germà" dels objectes que han de ser actius.

NOTA: En el moment d'escriure el tutorial (01/97), el Cosmo Player no no implementa aquest sensor.

Exercicis proposats:

Control d'un Objecte
Definiu tres objectes que facin d'icones i de sensors de moviment en el pla, rotació cilíndrica i rotació esfèrica per a moure un altre objecte que trieu.
Comentaris
  • Utilitzeu tan sols primitives per a modelar els objectes.
Solució proposada: sensors.wrl.




< Anterior | Menú ^ | Següent >