頂点バッファからテクスチャ貼り付けまでの流れがわからない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ナギサ

頂点バッファからテクスチャ貼り付けまでの流れがわからない

#1

投稿記事 by ナギサ » 9年前

以下のURLの参考サイト様を参考に質問させていただいてます
http://marupeke296.com/DXGSmp_No3_CreateTexture.html

学習し始めたばかりでよくわからないのですが、
「作成したテクスチャ」を「作成した頂点バッファ」にセットして描画する
というのを学習前に想定していたんですが、

コード:

g_pD3DDev->SetTexture(0, pTex[i]);
というコードでpTexがどうやってpVertexに関連付けられているかさっぱりわかりません。


思い浮かぶのは
「直前にSetTextureしたテクスチャが、直後にSetStreamSourceもしくはDrawPrimitiveした頂点バッファに使用される」
というものなんですが、実際そうなんでしょうか?
そうだとしたら、ゲーム中画像を表示したいときに、a.pngを描画→b.pngを描画→a.pngを描画といった時に無駄が出るように思えるんですが、実際のゲーム開発ではそんなことをやっているのでしょうか?
また、バッチ描画と関連があるものでしょうか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#2

投稿記事 by ISLe » 9年前

ナギサ さんが書きました:思い浮かぶのは
「直前にSetTextureしたテクスチャが、直後にSetStreamSourceもしくはDrawPrimitiveした頂点バッファに使用される」
というものなんですが、実際そうなんでしょうか?
そうです。
ナギサ さんが書きました:そうだとしたら、ゲーム中画像を表示したいときに、a.pngを描画→b.pngを描画→a.pngを描画といった時に無駄が出るように思えるんですが、実際のゲーム開発ではそんなことをやっているのでしょうか?
また、バッチ描画と関連があるものでしょうか?
テクスチャの切り替えが最小になるように最適化することで描画速度を上げます。
複数の画像を1枚のテクスチャにまとめたり、同じテクスチャを使用するオブジェクトをまとめて描画したりします。

ナギサ

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#3

投稿記事 by ナギサ » 9年前

回答ありがとうございます
なるほど、3Dモデルのテクスチャが魚の開きみたいな姿なのはSetTextureの回数を抑えるためなんですね

もう2つ質問したいのですが、
>テクスチャの切り替えが最小になるように最適化することで描画速度を上げます。
この「最適化」の処理がまさにバッチ処理による描画ということですか?

つまりバッチ処理による描画というのは、SetTexture1回にSetStreamSourceが複数対応していることを言うのですか?
SetTextureの回数を抑えるだけでパフォーマンスは上がりそうですが、
これがいわゆる「バッチ処理による描画」なのかというと、先ほど調べた下記のURLの「描画処理をまとめてドライバに転送することで」という部分にちょっと違和感があります。
まとまってるのはSetTextureのコールだけなのですが、かといって他にまとめられそうな情報は
IDirect3DVertexBuffer9の中に頂点をいっぱい入れるくらいなものなので・・(しかもそうすると繋がっていない頂点も出てくるのでD3DPT_TRIANGLESTRIPではなくなるような)
http://www.atmarkit.co.jp/fdotnet/direc ... 01_03.html


また、SetTextureの回数を抑えるために同じテクスチャでグループ(1つのSetTextureコールを使いまわすという意味で)すると、アルファを持つテクスチャのZソートとはどう組み合わせればいいのでしょうか?
透明度を持つテクスチャのグループはグループの中でZソートは出来ても、他のグループのテクスチャとZソートできないですよね?
ゲーム中で使用する全ての半透明テクスチャが一枚の画像ファイルに収められているなら別なんですが、そんなこと無さそうなので

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#4

投稿記事 by ISLe » 9年前

命令を発行した順そのままに実行されることをバッチ処理と呼びます。
コンピュータ用語としては一般的なもので、3D描画に限りません。
ナギサ さんが書きました:まとまってるのはSetTextureのコールだけなのですが、かといって他にまとめられそうな情報は
IDirect3DVertexBuffer9の中に頂点をいっぱい入れるくらいなものなので・・(しかもそうすると繋がっていない頂点も出てくるのでD3DPT_TRIANGLESTRIPではなくなるような)
『縮退ポリゴン』あるいは『縮退三角形』を調べてみてください。
ナギサ さんが書きました:透明度を持つテクスチャのグループはグループの中でZソートは出来ても、他のグループのテクスチャとZソートできないですよね?
ゲーム中で使用する全ての半透明テクスチャが一枚の画像ファイルに収められているなら別なんですが、そんなこと無さそうなので
テクスチャを必ずまとめなければならないわけではありません。
目的に対して最適となるように対策するのが最適化です。
主要キャラなどの差し替えが発生する部分以外は数枚のテクスチャにまとめることも少なくないと思いますが。

ナギサ

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#5

投稿記事 by ナギサ » 9年前

なるほど、縮退三角形を利用すればIDirect3DVertexBuffer9もまとめられると・・・
これが他フレームワークや教科書にあるいわゆるバッチ描画だったんですね
では、DXライブラリ等でバッチ描画とは銘打たれてない描画はその、最適化されていない描画ということでいいんでしょうか?

ひと通り疑問が解決したので、最後の確認だけ同じことかもしれませんがお願いしたいです

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#6

投稿記事 by ISLe » 9年前

ナギサ さんが書きました:では、DXライブラリ等でバッチ描画とは銘打たれてない描画はその、最適化されていない描画ということでいいんでしょうか?
特にバッチ描画と銘打たれていなければバッチ描画ではないと考えて良いと思います
という回答になります。

バッチ描画ではないということが、最適化されていないということにはなりません。
バッチ描画で命令の『発行数』を減らしても、描画処理全体で最適となるかどうかは状況に依るからです。

状況に応じて選択できることが重要になるため、命令はシンプルなほうが使い勝手が良いと言えます。

ナギサ

Re: 頂点バッファからテクスチャ貼り付けまでの流れがわからない

#7

投稿記事 by ナギサ » 9年前

なるほど、親切丁寧に最後までありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る