合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: tomtom
[URL]
Date: 2017年10月08日(日) 14:58
No: 1
(OFFLINE)

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

環境・・・VisualStudio2015/C++

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

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

Name: manntera
[URL]
ぴよぴよ(940 ポイント)
Date: 2017年10月09日(月) 03:25
No: 2
(OFFLINE)

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

fxファイルを増やして分岐させるのも一個の手段ですね。
後は、シェーダー内でif文で分岐したり(非推奨)
計算ロジックだけでif文無しで分岐っぽい事をさせてみたりね。
グローバル変数で、groundEnabeleみたいなのをつけて、
地面を描画する時には、CPU処理からgroundEnabeleに1を入れます。
コード[C++]: 全て選択
1
2
a=i.pos;
a=(b*groundEnabele)+(c*(1-groundEnable));

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

Name: lunnear
[URL]
ぴよぴよ(244 ポイント)
Date: 2017年10月09日(月) 11:19
No: 3
(OFFLINE)

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

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

Name: tomtom
[URL]
Date: 2017年10月09日(月) 13:23
No: 4
(OFFLINE)

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

mannteraさん

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


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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[13人]