DirectX9でのシェーダ描画に関して

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

DirectX9でのシェーダ描画に関して

#1

投稿記事 by tomtom » 7年前

環境・・・VisualStudio2015/C++

こんにちは。
今回、DirectX9にて、HLSL言語を用いてシェーダ描画をしたいと思っています。
そこで、.fxファイルにシェーダプログラムを書いていっているのですが、一つ疑問が。
例えば、自機、地面、建物のオブジェクトがあり、そのうち地面だけに他と違うエフェクトをつけたいとなった場合、どのようにすればいいのでしょうか。
.fxファイルを地面描画専用としてまた別でもう一つ作るのでしょうか?
その場合、VC側はどのように設計すればよいでしょうか?

プログラムの処理というより設計の問題だと思いますが、よろしくお願いします。

manntera
記事: 13
登録日時: 11年前

Re: DirectX9でのシェーダ描画に関して

#2

投稿記事 by manntera » 7年前

fxファイルを増やして分岐させるのも一個の手段ですね。
後は、シェーダー内でif文で分岐したり(非推奨)
計算ロジックだけでif文無しで分岐っぽい事をさせてみたりね。
グローバル変数で、groundEnabeleみたいなのをつけて、
地面を描画する時には、CPU処理からgroundEnabeleに1を入れます。

コード:

a=i.pos;
a=(b*groundEnabele)+(c*(1-groundEnable));
こうしてやると、aの値に足されるのは、
地面である場合はbの値が適用され、
地面出ない場合はcの値が適用される事になります。
こんな具合でシェーダーを一つにまとめてみるのも手段ですね。
DrawCallの回数を抑え込む為に時々上記の様なやり方はしますが、
まぁそこまで気にしなくて良いと思うのでfxファイルを分岐しちゃっていいと思います。

lunnear
記事: 10
登録日時: 7年前

Re: DirectX9でのシェーダ描画に関して

#3

投稿記事 by lunnear » 7年前

同ファイルでテクニックを増やせばいいだけじゃないですか?
先で書かれている通りファイルを増やすのもいいと思いますけど。

tomtom

Re: DirectX9でのシェーダ描画に関して

#4

投稿記事 by tomtom » 7年前

mannteraさん

なるほど。
CPU側からfxのフラグ変数のようなものに値を入れるのもありですね。
参考にさせていただきます。


lunnearさん
それも案の一つにあったのですが、そうすると一つの.fxファイルが長くなってしまいませんか?
ファイルが長くなるのは個人的にはあまり気に入らなくて・・・

返信

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