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); } } } |
コメント
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分