我发誓我一直在寻找这个问题的答案,但我找不到解决问题的真正办法。那是什么问题?
我是DirectX和着色器的新手。关于着色器有一些我还没有得到的东西。
1 - 如何制作着色器?我是否必须在项目中创建.fx文件?有时候是这样,但在某些例子中我找不到任何.fx文件。我该如何制作这个文件?我的Visual Studio版本无法直接创建.fx文件;我必须“强制”该文件为.fx。
2 - 我如何编译它们?它们是在我编译解决方案的同时编译的还是有特殊的编译方式?
3 - 有一个很好的教程吗?我一直在寻找着色器圣经,但大多数时候我发现了模糊和简短的教程解释了一些事情,而且从未深入过。
答案 0 :(得分:3)
<强> 1。 Shader的新手?
要获得分片器的介绍,请使用免费的shazzam着色器编辑器(http://shazzam-tool.com/),通过交互式绘图工具创建简单着色器。尝试使用不同的选项,然后比较自动生成的HLSL(.fx)代码以便更好地理解。在您了解着色器代码的编写方式后,您可以购买标准书籍/在线教程,并根据您的要求编写自己的代码。
<强> 2。常用的编译方法:
<强>一个。 D3DXCreateEffectFromFile - 编写着色器代码并保存在.fx扩展名中,并通过 D3DXCreateEffectFromFile 动态编译代码。编译代码可以使用效果(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。简介教程:
答案 1 :(得分:1)
着色器就像您将着色器代码放入其中的普通文本文件一样。如果使用D3D函数在运行时编译着色器,则无需将它们添加到项目中。
有两种方法可以做到这一点。一种是将着色器代码放在.fx文件或* .hlsl文件中,然后在运行时使用D3D库函数(D3DCompileFromFile)编译着色器。虽然微软不再暗示这一点,因为D3DCompileFromFile将无法在Metro风格的应用程序中运行。另一种方法是使用fxc.exe在构建时编译着色器。 Visual Studio 2012使此过程成为常规构建的一部分。因此,您可以将hlsl文件添加到项目中,并在构建项目时构建它们。这还使您能够在编译时在着色器中看到任何错误/警告。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb509633(v=vs.85).aspx
希望有所帮助。