
Etiquetas: complexIntersectionRectangle hitTestObject
La función hitTestObject(obj:DisplayObject) evalúa un objeto para comprobar si choca con el objeto obj. Por ejemplo, si tenemos dos objetos "Item1_mc" e "Item2_mc", podemos comprobar si chocan con:
Item1_mc.hitTestObject(Item2_mc)
Esta función, tiene el inconveniente de que comprueba los choques entre los contenedores rectangulares de los objetos. Por ejemplo:

por tanto, sin queremos comprobar las colisiones entre dos objetos no rectangulares, puede devolver valores que aparentemente no son correctos. Aquí tenemos un ejemplo en Flash:
Si queremos utilizar colisiones a nivel de pixel, podemos crear un objeto bitmapData, superponer los dos objetos en el objeto bitmapData con un filtro de color cada uno, y comprobar si hay pixels que tienen el color de la combinación de filtros utilizados. En el blog de
HitTest.complexHitTestObject(Item1_mc,Item2_mc)
Y si queremos recibir el rectángulo de colisión:
var rect:Rectangle = HitTest.complexIntersectionRectangle(Item1_mc,Item2_mc);
El resultado, sería este:
Los fuentes, y la clase HitTest de tink, tras el salto.

Etiquetas: Plane DisplayObject3D Viewport3D BasicRenderEngine
Existen dos maneras de crear una plano con dos caras en Papervision3D:
-Crear un cubo con una profundidad de 1pixel, y utilizar las caras delantera y trasera como caras del plano.
-Crear un contenedor DisplayObject3D, y meter dentro dos planos. El plano "b" debe tener una profundidad de 1 y una rotatión de -180º.
El segundo método es el que me parece más cómodo, ya que gestionar los materiales con un cubo es más engorroso que con un plano. Un ejemplo de plano con dos caras podrías ser:
contenedor = new DisplayObject3D();
var planoA = new Plane(new MovieAssetMaterial("CaraA"), 400, 400, 4, 4);
var planoB = new Plane(new MovieAssetMaterial("CaraB"), 400, 400, 4, 4);
planoB.z = 1;
planoB.rotationY = -180;
contenedor.addChild(planoA);
contenedor.addChild(planoB);
escena.addChild(contenedor);

Etiquetas: View3D addOnMouseDown MouseEvent3D object Plane
Para interactuar con el ratón en objetos 3d en Away3D 2.2, tenemos que seguir 2 pasos:
-Añadir el evento al objeto, utilizando la función addOnMouseDown (en este caso para detectar que hemos presionado en el objeto). A addOnMouseDown le pasamos como parámetro la función en la que se recoje el evento:
p.addOnMouseDown(planoElegido);
-Recoger el objeto pulsado en la función, por medio del parámetro object:
current = e.object;
El código completo:

Etiquetas: InteractiveScene3DEvent BasicRenderEngine Viewport3D displayObject3D

Etiquetas: Viewport3D BasicRenderEngine Scene3D Camera3D MovieMaterial MaterialList DisplayObject Viewport3D Vertex3D

Etiquetas: Object onKeyDown onKeyUp Key.getCode addListener