メイン ActionScript 3.0 特設会議室 papervision上でTweenerを使ってPlaneのscaleを変更する際のlookAtの動き。 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
mamotin | Åê¹ÆNo.40929 投稿日時: 2008-12-3 4:20 |
新米 居住地: 投稿: 19
使用環境:
WinXP FlashCS3 |
papervision上でTweenerを使ってPlaneのscaleを変更する際のlookAtの動き。 現在、papervisionを使って作品作りをしています。
papervisionと同時にTweenerを使っており、sceneに置かれたPlaneをそのTweenerで動かすというようにしています。 で、その時にsceneに置かれたPlaneは常にcameraの方を向く様にEnterFrameで plane001.lookAt(camera); と、しています。 その様な状況で、 Tweener.addTween(plane001, {scale:plane001.scale*1.5,time:0.5,transition:"easeInOutBack"}); と、Tweenerで「0.5秒でplane001をバネの様な動きで、scaleの値を1.5倍にする」という様にしています。 ここで問題なのが、 「常にplane001をcamera方に向かせた状態でplane001のscaleを1.5倍にする」 ということをしたいのですが、 Tweenerで拡大している最中はなぜかplane001はz軸の方向(rotationX,rotationY,rotationZが0の状態)を向いてしまうというトコです。 そこで、色々と実験してみたのですが、 scaleでは無く、xやyやzをTweenerで変更した場合は特にそのよう問題は起こらず、常にcameraを向いた状態でアニメーションしてくれました。 そしてもう一つ、Tweenしている最中のplane001のrotationYを知りたいと思い、 trace(plane001.rotationY); と、EnterFrameで設定し、常にplane001のrotationYを表示されるようにしたところ、何故かこの様な場合はplane001はcameraの方を常に向いた状態でアニメーションされました。 これはどういうことなのでしょうか? Tweener使った時のrotationとlookAtの関係がいまいち解りません・・・ /////////////////////////////////////ソースここから import org.papervision3d.core.proto.*; import org.papervision3d.materials.*; import org.papervision3d.materials.shadematerials.*; import org.papervision3d.materials.BitmapAssetMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.primitives.*; import org.papervision3d.lights.PointLight3D; import org.papervision3d.view.BasicView; import caurina.transitions.Tweener; import org.papervision3d.scenes.*; import org.papervision3d.cameras.*; import org.papervision3d.cameras.Camera3D; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.view.Viewport3D; import org.papervision3d.objects.*; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.special.ParticleMaterial; import org.papervision3d.objects.special.ParticleField; import org.papervision3d.core.geom.renderables.Particle; import org.papervision3d.core.geom.Particles; import org.papervision3d.objects.special.*; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.core.utils.InteractiveSceneManager; import caurina.transitions.properties.CurveModifiers; CurveModifiers.init(); var scene:Scene3D = new Scene3D(); var camera:Camera3D; var renderer : BasicRenderEngine; var viewport : Viewport3D; var bmd2:BitmapData=new BitmapData(305,250,false,0x000000); function sample3d():void { ///////////////////////////////////////////////////////////カメラ・ビューポート・レンダリング設定 camera = new Camera3D(); camera.focus = 1000; camera.zoom = 1; ///////////////////////////////////////////////////////////ライト・シーン var light = new PointLight3D; var objUCS:UCS = new UCS( 200 ); scene.addChild(objUCS); ///////////////////////////////////////////////////////////ビューポートの設定 viewport = new Viewport3D( 0, 0, true,true ); viewport.containerSprite.buttonMode = true; viewport.transform.colorTransform = new ColorTransform(); addChild(viewport); renderer = new BasicRenderEngine(); renderer.renderScene( scene, camera, viewport ); renderling();////////一時的にフレームレンダリング } sample3d(); //////////////////////////////////////////////////////////マテリアル・オブジェクトの設定 var mat1:BitmapMaterial = new BitmapMaterial(bmd2); mat1.oneSide = false; mat1.interactive = true; /////////////////////////////////////////////////////////////オブジェクトの作成 var plane001:Plane = new Plane( mat1,100,100, 1, 1); plane001.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick001); scene.addChild(plane001);//plane001の配置 //////////////////////////////////////////////////////////マウスイベント function mouseClick001(event:InteractiveScene3DEvent):void { Tweener.addTween(plane001, {scale:plane001.scale*1.5,time:0.5,transition:"easeInOutBack"}); } //////////////////////////////////////////////////////レンダリング function renderling():void { renderer.renderScene( scene, camera, viewport ); } stage.addEventListener( Event.ENTER_FRAME, this.loop3D );////////毎フレームレンダリング開始 function loop3D( event:Event ):void { renderling(); camera.target=plane001; camera.y = mouseY; camera.x = mouseX; plane001.lookAt( camera ); trace(plane001.rotationY); } |
mamotin | Åê¹ÆNo.40942 投稿日時: 2008-12-4 2:29 |
新米 居住地: 投稿: 19
使用環境:
WinXP FlashCS3 |
Re: papervision上でTweenerを使ってPlaneのscaleを変更する際のlookAtの動き。 すいません、自力でなんとかできました・・・。
onUpdate: function():void{plane001.lookAt(camera);} をTweenにくっつけてあげてTweenしてる間もcameraの方向を向くようにしました。 あと、複数のplaneをcameraの方向に向かせる場合は、外部の関数でTweenの間はcameraの方向を向かせるようにしました。 失礼しました。 ///////////////////////////////変更前///////////////////// Tweener.addTween(plane001, {scale:plane001.scale*1.5,time:0.5,transition:"easeInOutBack"}); ///////////////////////////////変更後///////////////////// ////////planeが一つの場合///////////////////// Tweener.addTween(plane001, {scale:plane001.scale*1.5,time:0.5,transition:"easeInOutBack",onUpdate: function():void{plane001.lookAt(camera);}}); ////////planeが複数の場合///////////////////// Tweener.addTween(plane001[i], {scale:plane001[i].scale*1.5,time:0.5,transition:"easeInOutBack",onUpdate: ka001}); function ka001():void { for(var i:int = 0;i<10;i++){ h001[i].lookAt( camera ); } } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |