オレメモ。
PV3Dにてレンダリングの深度をカメラからの深度ではなく強制的に固定させたいときに(最背面にレンダリングとか)いじるPV3Dの場所。
org.papervision3d.core.geom.TriangleMesh3D#project (line:140くらい)
screenZs += iFace.screenZ = (vertex0.z + vertex1.z + vertex2.z)/3; rc = face.renderCommand; visibleFaces++; rc.renderer = mat as ITriangleDrawer; // ここの数値が、Meshの深度をあらわす(小さいほうが奥) rc.screenDepth = iFace.screenZ; renderSessionData.renderer.addToRenderList(rc);
ここに特定条件の際に、任意の値を入れてあげればOK。
以前も書いたような気がするけど、ちゃんと書き出せないことがある。
書き出せないというか、エラーが出ずswfは出せるけど、スクリプトが全然動いてなくて、アニメーションが勝手に再生されるだけの状態。
大幅にクラスやMCの作りを変えたときなんかに発生するような気がする。
以下、羅列メモ。(AS3だけどAS2でも起こるような気がする。)
このケースはいままでも結構あるんだけど、大概Flashを再起動したり、ゴニョゴニョしたりで乗り越えてたけど、今回のはちょっと検討が付かない。
意味が分からん。
さっそく以下の機能を追加で実装してみた。
んー、こんなもんでコア部分はいいかな。
あとは、プロジェクトに入れよう。
・文字列連結 (a = 'A' + 'B')
・出力文内での処理 (print('A' + 'B' + (1 + 2));)
・true / falseの予約語 (入れ忘れた。後ほど実装予定。)
・コメント文の実装 (//, /* - */)
AS2だと正規表現がないからメンドイですね。
※)おかしなところ気づいたらコメントいただけるとうれしいです。
Flashでマクロのパーサー見たいのを書いた。
まだテスト中なのでうまく動くか分かりませんが。。。
基本的にはECMA Scriptの書き方ですが、多くの機能はサポートしてないアルヨ。
サポートは
・四則演算子(+, -, *, /)
・比較演算子(==, <, <=, >, >=)
・代入演算子(=)
・論理演算子(and, or)
・条件分岐 (if, else if, else)
・出力(print(param);)
・宣言文 (var param)
・型 (Number, String, Boolean)
こんなところかなー。
あと非サポートは
・代入文の受け渡し (hoge = fuga = 3)
・文字列連結 (a = 'A' + 'B')
・出力文内での処理 (print(1 + 2);)
・for 文 (対応予定なし。簡易マクロなので。)
・true / falseの予約語 (入れ忘れた。後ほど実装予定。)
こんなのとか、ほかもろもろできないこともあるかと思います。。。
なにか挙動がおかしかったらコメントいただけると助かります。
※)最後に記入したスクリプトはSOに保存されます。
ASCOLLADAのメモと実験。
現在PV3DにはBeta1.7系とsvnのbranchで開発されているBeta1.9系(Phunky)がある模様。
ASCOLLADAにも同様に1.7系で動くものとBranchで開発されている1.9系(Phunky)で動くものがある模様。
こちらが、1.9系(Phunky)。
こっちの方がZ軸の深度の重なりがうまく表現されている。
んー、早く正式版でないかなー。