HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0817
subd3moduleのd3textureについて3解決


sub

リンク

2008/8/17(Sun) 19:51:08|NO.18379

d3moduleのd3textureを使って、3D表示をしようと考えています。

しかし、描画命令の実行順に画面への描画が行われるのようで、
(座標として)奥にある面が手前にある面よりも前に描画されることがあります。

gmodeの5・6に設定して描画する手もありますが、
出来れば、座標によって面の描画する順番を、変更(並び替える)ようにしたいです。

どのようなアルゴリズムが良いですか?



この記事に返信する


SYAM

リンク

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を利用するプラグインにした方がよいのではないかと思います…。



sub

リンク

2008/8/20(Wed) 23:31:54|NO.18561

返信が遅れてすいませんでした。

>>いくつか示すことはできますが…。
ヒントは「ソート」ですね。
色々調べてみます。

>>他のDirectXを利用するプラグインにした方がよいのではないかと思います…。
d3moduleに慣れ親しんできた(?)ので、できればd3moduleを使いたかったのですが。
DirectXの利用も検討したいと思います。

ありがとうございました。



sub

リンク

2008/8/20(Wed) 23:34:16|NO.18562

解決のチェックを入れ忘れてました。
すいません。

今回は本当にありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.