トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   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 );
}
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops