2008/8/18(Mon) 22:10:15|NO.18413
いくつか示すことはできますが…。
とりあえずパラメータをd3textureに渡す代わりに配列変数に格納しておき、
描く予定のものを格納し終わったらカメラからの距離でソートしてから描画
または、
描く予定のすべての面に0でない通し番号をつけておき、
2次元配列 table の1番目の添え字を0から例えば1024、2番目の添え字を重なりそうな面の数(判らなければ面ぜんぶの数)で初期化しときます。
面が出来たらカメラからの距離が0〜1024に収まる範囲になるよう一定の係数で掛け算して整数化します。その結果を n として、table(n,0)に面の通し番号を書き入れます。
もしtable(n,0)が0でなければ table(n,1)…のように次の要素に書き入れます。
全てが終わったら、 tableの要素のうち0でないものを、添え字の大きい順にd3textureで描画します。
前者は面単位でのソートが確実にできますが、ソートが遅いと間に合いません。
後者はtableに書き込んだ時点でおおまかなソートが完成しているため多少早いですが、精度が落ちます。
ただし、どちらの方法にしても面単位での並び替えですから、面が交差してたりするとアウトです。
また、面のどこを基準にしてカメラからの距離とするかも重要だったりします。(大抵は平均をとったりしますね)
…で、ここまで書いておいてナンですが、
そもそもd3mは面のソートがないので普通のポリゴン表示には不向きです。(説明書にそう書いてありますし…。)
できれば他のDirectXを利用するプラグインにした方がよいのではないかと思います…。
|