ふんふん

2009年11月23日
最近ちょっと更新が滞ってます。
バンドの手伝いとか、手伝いじゃないのとか、色々もさもさしてて。

久しぶりに記事みなおしてみると色々直したいとこがあるなあ。。
とりあえず気になったのは、レンズフレアの記事で
もしかして黒に塗ってる意味ない?とか、
記事ではチャンネルコピーしてるけど
画像そのままコピーしてぼかしてアルファ値調べればいいだけ?とか・・・
負荷はあまり変わらないのかもしれないけどね。
落ち着いたら修正するかもしれません。
Flashコンテンツ(AS3)のステージ内でマウスを押した(MouseEvent.MOUSE_DOWN)ままFlashの領域外までドラッグした時、そのままではマウスを離したイベント(MouseEvent.MOUSE_UP)を検出できないんだけど、マウスがFlash領域から出た時を検出できるEvent.MOUSE_LEAVEを使うとマウスダウン→領域外までドラッグ→マウスアップのタイミングでもイベントが取れるのでこれを利用してボタンの表示を元に戻したりドラッグ処理を停止したりできます。

ただ、swfをhtmlに埋め込む時にwmodeを指定していると環境によってはEvent.MOUSE_LEAVEイベントが発生しない事があるっぽい。。。

そこで、検証用にサンプルを用意してちょっと実験してみました。全てWindowsXP、FlashPlayer10でテストしてます。真ん中の黒いボックスがボタンになっていて、マウスを押すとオレンジに、離すと青に変化するようになってます。

renderer.clipping = new FrustumClipping(~);
とかやっていると、
カメラを高速で回転した時とかに画面の端でポリゴンが
一瞬カリングされてしまう謎の現象があったんだけど
jp.ferv.blogさんの記事でやっと対処法がわかりました。

FrustumClippingを使うときはCamera3D.targetは使わず
代わりにCamera.lookAt()を使えば解決するようです。

で、これでめでたしめでたしと思いきや何故か上手くいかなくて、
結構長い間フガフガしてたんだけど
BasicViewクラスを使う時に
new BasicView(640, 480, false, false);
って第五引数を省略してたせいで
カメラタイプがデフォルトの"Target"になってしまってて
コンストラクタでcamera.target = DisplayObject3D.ZERO;されてたのが原因だった。。
いつも省略してたから全然気付かなかったよ・・・

new BasicView(640, 480, false, false, CameraType.FREE);
こんな風に第五引数を"Free"にして解決。

PV3D2.1: レンズフレア

2009年10月27日
Papervision3Dでウォークスルーの実験中。
walkthrough5.jpg
レンズフレアエフェクトをつけてみました。
海面のウネウネはなんか失敗。キラキラさせたかったんだけど・・・

太陽の部分は3dsMaxのレンズエフェクトでレンダリングしたもので、
画面全体にかかる光の輪はFlashの放射グラデーションです。
レンズフレアの仕組みはよくわかってないんだけど、
光の輪が複数個あって、それが画面中央の座標と光源を結ぶ直線上に並んでるって
イメージはあったのでそんな感じで表現してます。

PV3D2.1: 背景と高さ判定

2009年10月17日
Papervision3Dでウォークスルーの実験中。
walkthrough4.jpg
背景をつけてみました。
大きい一枚の画像をカメラの角度に合わせて上下左右にスクロールさせてます。
あと、高さ判定処理を組みなおして少しそれっぽく動けるようにしました。
高い所のモデルの下をくぐったり、高い所から落ちたりできます。
1  2  3  4  5  6