2009-09-04 4 views
0

私は初めてPapervision3Dで子どものオブジェクトを回転させ、y軸に歪んだ画像のスライドショーを作成しました。左の写真は小さいですが、右に行くほどサイズが大きくなります。したがって、左から右にズームし、最小から最大までズームします。Papervision3D;

私はあなたが写真の上を飛ぶときにポップアップするツールチップを持っていますが、ツールチップもカメラのビュー(斜め)に比例してゆがんでいます。ツールヒントの角度をカメラビュー全体とは独立させたい

親のカメラアングルから独立してオブジェクトを回転させる方法はありますか?

ありがとうございます!

答えて

0

my_obj = new DisplayObject3D(); my_plane = my_obj.addChild(新しいプレーン(bla bla)); my_obj.lookAt(カメラ);

「lookAt」ビットが必要なものです。

+0

lookAtは、いくつかの厄介な理由から、オブジェクトをカメラから見えるようにします(私が何を意味するかを見るために両面素材のテキストオブジェクトを使用します)。また、テキストは、カメラに向かって傾いた平面上に描画され、平面に近い平面には描画されません(おそらく彼が望むものです)。 –

0

2dでツールチップを描画してみませんか?あなたがそうのような定期的なスプライトを画像の画面上の位置を取得し、ただ描くことができます。

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); 
    } 
} 

} 

をしてもあなたはスケールのオブジェクトに基づいて、ツールチップのy位置をオフセットする必要があると思います。この例のためではなく、ローテーションを行うよりも簡単で、一貫した見た目の結果を得るための最良の方法です。

関連する問題