3

我发誓我一直在详尽地寻找这个问题的答案,但我没有找到真正解决我的问题的方法。那是什么问题?

好吧,我是 DirectX 和着色器的新手。关于着色器的一些事情我仍然不明白。

1 - 如何制作着色器?我必须在项目中创建一个 .fx 文件吗?有时确实如此,但在某些示例中,我找不到任何 .fx 文件。以及如何制作这个文件?我的 Visual Studio 版本无法直接创建 .fx 文件;我必须将文件“强制”为 .fx。

2 - 我如何编译它们?他们是在我编译解决方案的同时编译还是他们有特殊的编译方式?

3 - 周围有很好的教程吗?我一直在寻找着色器圣经,但大多数情况下我发现解释一些事情的模糊和简短的教程,而且从来没有深入的方式。

4

2 回答 2

3

1. 着色器新手?

要了解 sharder,请使用免费的 shazzam 着色器编辑器 ( http://shazzam-tool.com/ ) 通过交互式绘图工具创建简单的着色器。尝试使用不同的选项,然后比较自动生成的 HLSL(.fx) 代码以便更好地理解。在您了解如何编写着色器代码后,购买标准书籍/在线教程并练习根据您的要求编写自己的代码。

2. 常用编译方法:

一种。D3DXCreateEffectFromFile - 编写着色器代码并保存在 .fx 扩展名中,并通过D3DXCreateEffectFromFile动态编译代码。编译后的代码可以使用 effect(ID3DXEffect) 接口在你的核心模块中使用。

湾。显式编译:编写着色器代码并保存在 .fx 扩展名中,并使用 fxc.exe 显式编译代码(您可以在 DirectX SDK Utility 文件夹中找到)。

示例:
fxc.exe /Tfx_2_0 /Fo file.fxo file.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. 有两种方法可以做到这一点。一种是将着色器代码放在 .fx 文件或 *.hlsl 文件中,然后在运行时使用 D3D 库函数 (D3DCompileFromFile) 编译着色器。尽管微软不再建议这样做,因为 D3DCompileFromFile 在 Metro 风格的应用程序中不起作用。另一种方法是使用 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 回答