最近SlimDXとC#を使ったプログラミングを始めました。
ですが、ゲーム内でのTextureの描画をどうしたらよいかわかってません。
というのは、今まで私はMDXやDXライブラリを使った「Sprite」での画像の描画や変形を行っており、「頂点」というものを扱ったことが有りません。
しかし知人にTwitter等で聞いてみると「Sprite描画は処理が遅くてプログラムも遅くなる」と言われてどうしたらよいか分からなくなっています。
...つまり質問内容は
・SpriteとTextureを使った描画、頂点とTextureを使った描画ではどちらが処理が早いのか
・SpriteのようにX,Y,回転等の動作を頂点でも扱えるのか(?)(条件としてSlimDXを使うということで)
です。よろしくお願いします
SlimDX(というよりDirectX)を使ってプログラミングをするときの描画について
Re: SlimDX(というよりDirectX)を使ってプログラミングをするときの描画について
大規模な商業ゲームを作る予定でもあるのでしょうか?sujan さんが書きました:しかし知人にTwitter等で聞いてみると「Sprite描画は処理が遅くてプログラムも遅くなる」と言われてどうしたらよいか分からなくなっています。
速くしたいならスプライトを使わないようにする前に、レンダーステートやテクスチャの切り替え回数を減らす工夫をしてください。sujan さんが書きました:・SpriteとTextureを使った描画、頂点とTextureを使った描画ではどちらが処理が早いのか
実装によりますがスプライトは個々に画像を指定するのでテクスチャの切り替えが頻繁に行われて遅くなる傾向にあります。
スプライトを使わないようにしてもテクスチャの切り替えが頻繁に行われるままでは速くなりません。
ちなみにD3DXの実装が酷くてスプライト機能の評判を著しく落としたのは何年も前の話で、改善されてからもずいぶん経ちますけど。
頂点を結んだときに、四角形が傾くように配置すれば回転を表現できます。sujan さんが書きました:・SpriteのようにX,Y,回転等の動作を頂点でも扱えるのか(?)(条件としてSlimDXを使うということで)
台形に変形させて、奥行きのある壁を表現することもできます。
スプライト機能でできて、頂点指定でできないことはありません。
http://www21.atwiki.jp/csharpgamedev/pages/18.html
↑のページに掲載されているサンプルコードが分かりやすいと思いました。
-
sujan
Re: SlimDX(というよりDirectX)を使ってプログラミングをするときの描画について
>>ISLeさん
返信どうも有難うございます。
なるほど、Sprite自体で重くなるのでは無く、その周辺での動作(TEXTUREの切り替え回数)で重くなるというのは初耳でした。とても参考になりました。
ちなみにTEXTUREの切り替え回数の工夫として、例えばTextureを使って、絵毎に「背景.png,プレイヤー1.png,プレイヤーの球1.png....」と用意するよりも、ひとつの画像にまとめてRectangleで取って使う(または頂点UVを触って必要部分だけ切り取る)というやり方でよろしいのでしょうか?
出来れば続けてご返信お願いしますm(_ _)m
参考URLまで貼っていただき有難うございます!
返信どうも有難うございます。
なるほど、Sprite自体で重くなるのでは無く、その周辺での動作(TEXTUREの切り替え回数)で重くなるというのは初耳でした。とても参考になりました。
ちなみにTEXTUREの切り替え回数の工夫として、例えばTextureを使って、絵毎に「背景.png,プレイヤー1.png,プレイヤーの球1.png....」と用意するよりも、ひとつの画像にまとめてRectangleで取って使う(または頂点UVを触って必要部分だけ切り取る)というやり方でよろしいのでしょうか?
出来れば続けてご返信お願いしますm(_ _)m
参考URLまで貼っていただき有難うございます!
Re: SlimDX(というよりDirectX)を使ってプログラミングをするときの描画について
そうなりますね。sujan さんが書きました:ちなみにTEXTUREの切り替え回数の工夫として、例えばTextureを使って、絵毎に「背景.png,プレイヤー1.png,プレイヤーの球1.png....」と用意するよりも、ひとつの画像にまとめてRectangleで取って使う(または頂点UVを触って必要部分だけ切り取る)というやり方でよろしいのでしょうか?
もっと言うと、例えばステージ1とステージ2に同じ敵キャラが出てくるとしたらステージ1用のテクスチャとステージ2用のテクスチャに同じ画像を重複して含めたりします。
そこまでやるとなると環境整備がたいへんなので、規模の小さいうちは、テクスチャをまとめるのと、描画処理で描画対象を回すループを工夫するだけでずいぶん違うと思いますよ。
-
sujan
Re: SlimDX(というよりDirectX)を使ってプログラミングをするときの描画について
>>ISLeさん
なるほど!できるだけ小規模でまとめてみたいと思います
分かりやすい説明と回答有難うございました!これから頑張ってみようと思います!
なるほど!できるだけ小規模でまとめてみたいと思います
分かりやすい説明と回答有難うございました!これから頑張ってみようと思います!