"Billboarding" y Colisiones.
"Billboarding"
Esta técnica se utiliza mucho en gráficos 3D a tiempo real para representar objetos que tendrían una geometria muy compleja si fueran modelados en polígonos. Lo que se hace es texturar un solo polígono con la textura del objeto en cuestión y se le da la propiedad de "billboard" o "valla publicitaria", con la cual se consigue que el polígono siempre esté encarado hacia el observador. Con esto se consigue que nunca se descubra el "truco" porque el usuario nunca verá el polígono de perfil. En VRML97 esto se consigue mediante el node Billboard. Veamos un ejemplo:Ejemplo1: Definición de un arbol mediante un billboard.
Billboard {
axisOfRotation 0 1 0
children Shape {
geometry IndexedFaceSet {
coord Coordinate {
point [ 2 3 0, -2 3 0, -2 -3 0, 2 -3 0 ]
}
coordIndex [ 0 1 2 3 ]
solid FALSE
texCoord TextureCoordinate {
point [ 1 1, 0 1, 0 0, 1 0 ]
}
}
appearance Appearance {
texture ImageTexture {
url "redwood.gif"
}
}
}
}
|
Como el eje que hemos definido es el Y, entonces sólo nos seguirá si nos movemos en un plano perpedicular a este eje. Si nos movemos hacia arriba o abajo, podemos perder el efecto deseado.
Colisiones
La deteccióa de colisiones puede ser muy importante en algunos casos y el VRML97 permite una detección parcial. Parcial en el sentido que tan solo da mecanismos para detectar colisiones entre el observador (punto de vista virtual) y los objetos, pero no entre objetos.El mecanismo para activar y desactivar la detección de colisiones funciona a partir de un nodo de agrupación: el node Collision. Este se utiliza de manera que agrupa una lista de objetos los cuales no se desea que el observador pueda atravesar. Veamos un ejemplo:
Ejemplo2: Definición de un grupo de colisión.
Collision {
collide FALSE
children [
Transform {
translation -3 0 0
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance { material Material { diffuseColor 1 0 0 } }
}
}
]
}
Collision {
collide TRUE
children [
Shape {
geometry Sphere { radius 1 }
appearance Appearance { material Material { diffuseColor 0 1 0 } }
}
Transform {
translation 3 0 0
children Shape {
geometry Cone { height 1 bottomRadius 1 }
appearance Appearance { material Material { diffuseColor 0 0.5 1 } }
}
}
]
}
|








0 comentarios:
Publicar un comentario