info

category : FlashAS3
[Papervision3D]BitmapMaterialで一瞬カッ!てなる→解明  @ FlashAS3 , FlashAS3 Tips , Papervision3D 2008年12月19日

タイトル通りBitmapMaterialで一瞬カッ!てなる(ブラウザが一瞬止まる)原因を解明しました。
BitmapMaterial.asの135行目あたりのgraphics.beginBtimapFillメソッドの
手前に下記のコードを追加すれば回避できます。
テクスチャがおかしくなるときはlimitの値を大きくしてください。
これを使ってcharaがスムーズに動くようになりました。
どっちでも変わらないっていうPCには関係ないです。

chara(下記コードを適応したもの)
chara(下記コードを適応していないもの)

var limit:int=18000;
if(Math.abs(_localMatrix.tx)>limit)_localMatrix.tx=limit*((_localMatrix.tx==0)?0:((_localMatrix.tx>0)?1:-1));
if(Math.abs(_localMatrix.ty)>limit)_localMatrix.ty=limit*((_localMatrix.ty==0)?0:((_localMatrix.ty>0)?1:-1));
[Papervision3D]human  @ FlashAS3 , Flash DEMO , Papervision3D 2008年11月24日

Papervision3Dで人。
人がちょこちょこするものは色々作ってきたのですが
ついにというかやっとというかPapervisionで作ることができました。本当にありがとうございました。
え?何の役に立つのかですって? そんなことはどーでもいーんです(`・ω・´)おもしろければ

スクリーンショット1

human

[Papervision3D]リボン  @ FlashAS3 , Flash DEMO , Papervision3D 2008年11月24日

Papervision3Dでリボンです。
やり方としてはPlane内のTriangle3Dの頂点を操作してPlane同士をつながっているように見せています。
異常に面倒臭いわりに見た目、実用性などいまいちでした。(´・ω・`)
異常に面倒臭い過程は↓
・ABCD…のPlaneを用意
・Aの左端をワールド座標へ変換※1
・Bの左端をワールド座標へ変換
・AとBの座標の差を求める
・得られた座標をAのローカル座標A’へ変換
・Aの右端のTriangle3Dの頂点をA’へ移動
・対象Planeを変えて※1へ
以上です。

何か他に良い方法は無いだろうか・・・。

スクリーンショット1

リボン

[3Dプロッタver2]  @ FlashAS3 , FlashAS3 Tips 2008年10月18日

Papervision3Dを使うほどではないが、3Dな表現をしたいなぁというときには3Dプロッタを使っています。
前回のコードはカメラが動かない条件下で使えるものだったのですが
カメラを動かす必要が出てきたので作ってみました。Papervision3Dと同じ演出をすることができます。
スクリーンショット1

3Dプロッタ2

焦点距離:camera.focus
拡大率:camera.zoom
対象オブジェクト:target_mc
対象オブジェクト3D座標:_x, _y, _z

scale=(camera.focus)/(camera.focus+(target_mc._z-camera.z-camera.focus)) * camera.zoom;
xpos=(target_mc._x-camera.x)*scale;
ypos=-(target_mc._y-camera.y)*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;
[3Dプロッタ]  @ FlashAS3 , FlashAS3 Tips 2008年8月12日

Papervision3Dを使うほどではないが、3Dな表現をしたいなぁというときには3Dプロッタを使っています。
下記のコードは昔からある古典的3D計算だそうです。よく忘れるのでメモ

焦点距離:camera_f
対象オブジェクト:target_mc
3D座標:x3d, y3d, z3d

var scale=camera_f/(camera_f+target_mc.z3d);
var xpos=target_mc.x3d*scale;
var ypos=target_mc.y3d*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;