2009-09-04 8 views
0

Es ist das erste Mal, dass ich mit Papervision3D arbeite und eine Diaschau mit Bildern erstellt habe, die auf der y-Achse verdreht ist. Kleinste Fotos auf der linken Seite, und sie vergrößern sich nach rechts. Also zoomen sie von links nach rechts, vom kleinsten zum größten.Papervision3D; Kinderobjekte in der Kameraansicht drehen

Ich habe einen Tooltip, der angezeigt wird, wenn Sie über das Foto fahren, aber der Tooltip wird auch proportional zur Kameraansicht geneigt (schräg). Ich möchte, dass der Winkel des Tooltips unabhängig von der gesamten Kameraansicht ist.

Irgendeine Idee, wie man Objekte unabhängig vom Kamerawinkel des Elternteils dreht?

Danke!

Antwort

0

my_obj = neu DisplayObject3D(); my_plane = my_obj.addChild (neue Ebene (bla bla)); my_obj.lookAt (Kamera);

Das 'LookAt'-Bit ist, was Sie brauchen.

+0

lookAt, aus irgendeinem ärgerlichen Grund, lässt das Objekt * weg * von der Kamera aussehen (benutze ein Textobjekt mit einem doppelseitigen Material, um zu sehen, was ich meine). Außerdem wird der Text auf eine Ebene gezeichnet, die zur Kamera geneigt ist, nicht in einer Ebene parallel zu den Kameras in der Nähe der Ebene (was wahrscheinlich ist, was er will). –

0

Warum nicht die Tooltips in 2D zeichnen? Sie können die auf dem Bildschirm angezeigten Position der Bilder erhalten und dann nur eine regelmäßige Sprite zeichnen wie so:

package 
{ 
import flash.display.Sprite; 
import flash.text.TextField; 

import org.papervision3d.events.InteractiveScene3DEvent; 
import org.papervision3d.materials.ColorMaterial; 
import org.papervision3d.objects.DisplayObject3D; 
import org.papervision3d.objects.primitives.Plane; 
import org.papervision3d.typography.Text3D; 
import org.papervision3d.view.BasicView; 

public class PVTest extends Sprite 
{ 
    private var world:BasicView; 
    private var text:Text3D; 
    private var text2d:TextField; 

    public function PVTest() 
    { 
     world = new BasicView(stage.width, stage.height, true, true); 

     var colorMat:ColorMaterial = new ColorMaterial(); 
     colorMat.interactive = true; 

     var planeContainer:DisplayObject3D = new DisplayObject3D(); 
     var plane:Plane; 
     for(var i:int = 0; i < 11; i++) 
     { 
      plane= new Plane(
       colorMat, 
       100, 100, 
       10); 
      plane.x = (i * 105) - 500; 
      plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleMouseOver); 
      plane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleMouseOut); 
      planeContainer.addChild(plane); 
     } 

     planeContainer.rotationY = 10; 
     world.scene.addChild(planeContainer); 

     world.camera.z = -500; 

     addChild(world); 
     world.startRendering(); 
    } 

    private function handleMouseOver(event:InteractiveScene3DEvent):void 
    { 
     var plane:Plane = Plane(event.displayObject3D); 
     plane.calculateScreenCoords(world.camera); 

     const OFFSET_X:int = -20; 
     const OFFSET_Y:int = 30; 
     text2d = new TextField(); 
     text2d.text = "toolTip"; 
     text2d.x = plane.screen.x + (stage.width/2) + OFFSET_X; 
     text2d.y = plane.screen.y + (stage.height/2) + OFFSET_Y; 
     addChild(text2d); 
    } 

    private function handleMouseOut(event:InteractiveScene3DEvent):void 
    { 
     removeChild(text2d); 
    } 
} 

} 

Auch für dieses Beispiel haben Sie würde die y Position des Tooltips auf den Objekten basierend auf Offset skaliert aber Es kann einfacher sein, als die Rotationen zu berechnen und ist der beste Weg, um ein konsistentes Ergebnis zu erzielen.