3

私はこの質問に対する答えを徹底的に探していたと誓いますが、私の問題に対する本当の解決策は見つかりませんでした。そして、それはどのような問題ですか?

私はDirectXとシェーダーを初めて使用します。シェーダーについては、まだ取得できないことがいくつかあります。

1-シェーダーの作り方は?プロジェクトに.fxファイルを作成する必要がありますか?そうなることもありますが、いくつかの例では.fxファイルが見つかりません。そして、どうすればこのファイルを作成できますか?私のバージョンのVisualStudioは、.fxファイルを直接作成できません。ファイルを.fxに「強制」する必要があります。

2-どのようにコンパイルしますか?それらは私がソリューションをコンパイルするのと同時にコンパイルされますか、それともコンパイルするための特別な方法がありますか?

3-周りに素晴らしいチュートリアルはありますか?私はシェーダー聖書を探していましたが、ほとんどの場合、いくつかのことを説明する漠然とした短いチュートリアルを見つけました。

4

2 に答える 2

3

1. シェーダーは初めてですか?

sharder の概要を理解するには、無料の shazzam シェーダー エディター ( http://shazzam-tool.com/ ) を使用して、インタラクティブな描画ツールで単純なシェーダーを作成します。別のオプションを試してから、自動生成された HLSL(.fx) コードを比較して理解を深めてください。シェーダー コードをどのように記述するかを理解したら、標準の書籍/オンライン チュートリアルを購入し、要件に応じて独自のコードを記述する練習をしてください。

2. コンパイルの一般的な方法:

a. D3DXCreateEffectFromFile - シェーダー コードを記述して .fx 拡張子で保存し、 D3DXCreateEffectFromFileによってコードを動的にコンパイルします。コンパイルされたコードは、エフェクト (ID3DXEffect) インターフェイスを使用してコア モジュールで使用できます。

b. 明示的なコンパイル:シェーダー コードを記述して .fx 拡張子で保存し、fxc.exe を使用してコードを明示的にコンパイルします (DirectX SDK ユーティリティ フォルダーにあります)。

例:
fxc.exe /Tfx_2_0 /Fo ファイル.fxo ファイル.fx

バイナリファイルが作成されたら、次のようにします

  1. Create a buffer and load the generated binary file(.fxo) by the file stream.
  2. Call D3DXCreateEffect and give the buffer content as a input parameter.
  3. Like "method a" use effect(ID3DXEffect) interface for interacting with the
     shader code. 

3. 導入チュートリアル:

http://rbwhitaker.wikidot.com/hlsl-tutorials

于 2013-11-07T11:57:11.127 に答える
1
  1. シェーダーは、シェーダー コードを入れる通常のテキスト ファイルと同じです。D3D 関数を使用して実行時にシェーダーをコンパイルする場合は、それらをプロジェクトに追加する必要はありません。

  2. これには 2 つの方法があります。1 つは、シェーダー コードを .fx ファイルまたは *.hlsl ファイルに配置し、実行時に D3D ライブラリ関数 (D3DCompileFromFile) を使用してシェーダーをコンパイルすることです。ただし、D3DCompileFromFile は Metro スタイル アプリでは機能しないため、Microsoft はこれを推奨していません。もう 1 つの方法は、ビルド時に fxc.exe を使用してシェーダーをコンパイルすることです。Visual Studio 2012 では、このプロセスが通常のビルドの一部になりました。したがって、hlsl ファイルをプロジェクトに追加すると、プロジェクトをビルドするときにビルドされます。これにより、コンパイル時にシェーダーでエラー/警告を確認することもできます。

  3. http://msdn.microsoft.com/en-us/library/windows/desktop/bb509633(v=vs.85).aspx

それが役立つことを願っています。

于 2012-08-21T13:26:53.977 に答える