« FlexでDisplayShelf | トップページ | FlexでHPみたいなの »

2008年10月 5日 (日)

Papervision3Dをやってみた48

P_10





















vectorvisionでちょっと気になること。

イベント追加の話。

まずはマテリアルのinteractiveをtrueにします。

Word3D自体にイベントを追加しても何も起こらなかったので、lettersプロパティの中にあるDisplayObject3Dに対してイベントを追加する。

これなら動いた。

Tweenerで色もトゥイーンしたかったけどそれはできなかった。

残念。

とりあえず、こんな感じ

文字をクリックすると、動きます。






以下、ソースです。

package {
import caurina.transitions.Tweener;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.special.VectorShapeMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.special.VectorShape3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.typography.Word3D;
import org.papervision3d.typography.fonts.HelveticaBold;
import org.papervision3d.view.Viewport3D;

[SWF(backgroundColor=0x000000)]
public class Papervision3D_sample59 extends Sprite
{
  private var container:Sprite;
  private var viewport:Viewport3D;
  private var scene:Scene3D;
  private var camera:Camera3D;
  private var render:BasicRenderEngine;
  private var rootNode:DisplayObject3D;
  private var words:Word3D;
  private var shape:VectorShape3D;
  private var theta:Number=0;
 
  public function Papervision3D_sample59()
  {
   container = new Sprite();
   addChild(container);
   container.x = stage.stageWidth/2;
   container.y = stage.stageHeight/2;
   
   viewport = new Viewport3D(0,0,true, true);
   scene = new Scene3D();
   camera = new Camera3D();
   render = new BasicRenderEngine();
   rootNode = scene.addChild( new DisplayObject3D("rootNode"));
   addEventListener(Event.ENTER_FRAME, onFrame);
   
   addChild(viewport);
   camera.target = DisplayObject3D.ZERO;

   stage.frameRate = 30;
   stage.quality = StageQuality.LOW;
   stage.align = StageAlign.TOP_LEFT;
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.addEventListener(Event.RESIZE, onResize);
   
   // Word3Dの作成
   var mat:VectorShapeMaterial = new VectorShapeMaterial(0xff0000);
   // イベントを利用する場合は、マテリアルのinteractiveをtrueにしなければいけない。
   mat.interactive = true;
   mat.doubleSided = true;
   words = new Word3D("ABCDEFGHIJKLMN", new HelveticaBold(), mat);
   rootNode.addChild(words);
   
  // 各文字にイベントを追加
   for each(var word:DisplayObject3D in words.letters)
   {
    word.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
   }
  }
 
  // クリック用関数
  private function onClick(e:InteractiveScene3DEvent):void
  {
   var do3d:DisplayObject3D = e.target as DisplayObject3D;
 
   // 大きくなって、元に戻る。それだけ。
   Tweener.addTween(do3d,{scale:2, y:200, time:2, transition: "easeOutBounce"});
   Tweener.addTween(do3d,{scale:1, y:0, delay:2, time:4});
  }
 
  private function onResize(e:Event):void
  {
   container.x = stage.stageWidth / 2;
   container.y = stage.stageHeight / 2;
  }
 
  private function onFrame(e:Event):void
  {
  // 文字が常にカメラをむく
   for each(var word:DisplayObject3D in words.letters)
   {
    word.lookAt(camera);
   }
   
   camera.x = 800*Math.sin(theta*Math.PI/180);
   camera.z = -800*Math.cos(theta*Math.PI/180);
   theta += 0.5;
   
   render.renderScene(scene,camera,viewport);
  }
}
}

|

« FlexでDisplayShelf | トップページ | FlexでHPみたいなの »

ActionScript」カテゴリの記事

Papervision3D」カテゴリの記事

Tweener」カテゴリの記事

コメント

for文でワードから文字を取り出すときに

letter.useOwnContainer = true;

っとかはどう?

http://clockmaker.jp/blog/2008/07/pv3d_gw_blur/

投稿: むぎ。 | 2008年10月 6日 (月) 10時50分

>むぎさん

useOwnContainerをtrueにしちゃうと、マウスイベントが利用できなくなってしまうんです。

今のPV3Dの使用なのかわかりませんが・・・。

エフェクトを利用したいなら、ViewportLayerを利用するしかないみたいですね。

投稿: 鮭 | 2008年10月 6日 (月) 17時12分

ほんとだ。

なんという。

フィルターってことはカラーマトリックスでα値を変更とかなんかなぁ。

投稿: むぎ。 | 2008年10月 7日 (火) 11時32分

鮭さん

うぉーー!!マウスに反応してる!!
質問に答えていただいて、しかもわざわざサンプルまで作っていただいてありがとうございます!

ソースを見る限り思うことはもっと根本的なとこからの理解が必要だなと思いましました。大変勉強になります^^)

投稿: カッシー | 2008年10月 8日 (水) 08時48分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1040194/24282880

この記事へのトラックバック一覧です: Papervision3Dをやってみた48:

« FlexでDisplayShelf | トップページ | FlexでHPみたいなの »