2011年4月23日土曜日

Away3D Lite の z オーダーの問題

Away3D Lite はどうにも3Dオブジェクトが重なった時の処理に難がある。本来後ろに見えなければならないオブジェクトが前に来たりする。
解決方法の一つはオブジェクトをレンダリングするレイヤーを複数持たせ、明示的に前後関係をコントロールすることみたいだ。
この手法を行うには FastRenderer というレンダリングクラスを使う。
FastRenderer にはわたしが使っているバージョン 1.0.0 の時点ではバグがあるようである。

FastRenderer クラス (away3dlite/core/render) の collectFaces(object:Object3D) メソッドの以下の処理

for each (child in children) {
if(child.layer)
child.layer.graphics.clear();
collectFaces(child);
}

これは、本来こうならなければならないはずだ。

for each (child in children) {
if(child.layer)
child.layer.graphics.clear();
}
for each (child in children) {
collectFaces(child);
}


ライブラリにこの修正を加え、作ってみたテストコンテンツが以下の通り。
ソースコードも添付した:ソースコード

サンプルコンテンツを別ウィンドウで開く

0 件のコメント:

コメントを投稿