所以,我不知道如何使用着色器。编码它们很简单,但实际上并不是使用它们。 MSDN对我来说真的没用,这意味着他们有最糟糕的教程。我现在正在阅读Frank Luna的Direct3d 11书,我终于到了实际绘制内容的部分。令人兴奋的是,除了没有这样的事实。他的BoxDemo - 我确信3年前这本书出版时,但是现在有了所有新的DirectX东西 - 省略了DirectX SDK并且现在使用" Windows SDK",FX被弃用了,不再有D3DX库......太令人沮丧了。我继续并降级到DirectX 2010 SDK - 只是这样我才能真正使用教程。几乎每个D3D教程都使用D3DX库。
无论如何......现在回答我的问题。 Visual Studio有一个选项来生成.hlsl文件。但是,它还具有make .fx文件的能力(如果你只是在它创建.fx文件的文件名末尾键入.fx)。 所以,我可以使用弃用的.fx方法,并学习如何在教授它的所有教程中轻松使用它 - 或者我可以学习新的 HLSL方式,并且有最困难,最令人沮丧的时间尝试没有教程就能学习它。
我知道他们都使用HLSL语言。但它们在程序中的使用方式不同。 (CreateEffectFromMemory,CompileFromFile等)。 我有点希望学习新方法,但如果我没有那么好。虽然,我几乎有一个使用.fx文件的整个程序。我确信它会起作用,但我只需要帮助构建和利用" Effects11.lib"。
很抱歉拖拽帖子 - 事实上,我确信我暂时不会得到任何回复 - 如果我确实得到任何回复 - 由于长度。我非常沮丧,因为学习DirectX让我的编程生涯在过去的一个月,2个月内处于大规模的中断状态。请感谢您的帮助
答案 0 :(得分:5)
文件扩展名.hlsl
与.fx
是任意的。这就像.cpp
和cxx
之间的区别。历史上.fx
用于包含顶点着色器,像素着色器和效果(FX)技术/过程的HLSL着色器,而.hlsl
是不包含效果(FX)技术的文件/通过,但只是一个惯例。那里有很多用过的东西。
重要的是文件编译的方式。如果使用fx_5_0
,则需要Effects 11运行时才能实际使用它们。这本身并没什么特别的。它实际上只为您为Effects(FX)技术/传递提供的compile
语句的每个组合调用相同的编译器,并将其与一些元数据捆绑在一起。实际上,您通常可以在包含技术/的.fx
文件上调用FXC编译器,并使用vs_5_0
或ps_4_0
之类的函数进行传递,如果获得,它将编译适当的特定于阶段的着色器参数恰到好处。
RE:Effects11
Effects 11的主要问题是它在运行时需要D3DCompile DLL,因为它使用它来提取连接状态和着色器所需的元数据。当您实际部署应用程序时,只有在开发应用程序时,此D3DCompile DLL才能用于Windows 8.0和Windows Phone 8.0中的Windows应用商店应用。因此,效果11不适用于那些平台。
对于Windows 8.1或Windows Phone 8.1的Windows应用商店应用,这不再是技术问题,但仍然不推荐对fx_5_0
的编译器支持。它有一些针对其他配置文件vs_5_0
等修复的问题。如果您想要使用它,只要您了解它的局限性,就由您决定。
效果11的最新版本在CodePlex,我解决了那里的限制。有一些简单tutorials使用它,以及一些samples。此版本的 Effects 11 实际上根本不需要传统的DirectX SDK。
简而言之,YMMV w.r.t.到效果11,但你仍然可以将它用于Win32桌面应用程序,适用于Windows 8.1的Windows应用商店应用程序,Windows Phone 8.1应用程序,以及理论上的Xbox One应用程序。
RE:D3DX
我可以理解这种挫败感,但这是图书出版行业和技术书籍在变化方面落后的常见问题。 DirectX 11是在2008年推出的。转换到Windows 8 SDK的时间是在2012年,大多数开发人员完全错过了它。我在blog上有关于该书的一些注释。
有关“现代”替代方案的完整列表,请参阅Living without D3DX。
对于Win32桌面应用,您可以继续使用旧版DirectX SDK。需要注意的主要事项是,使用VS 2012和VS 2013附带的Windows 8.x SDK,include
和lib
路径订单颠倒比VS 2010.有关详细信息,请参阅MSDN。
RE:学习Direct3D 11
你看过DirectX Tool Kit吗?
Getting Started with Direct3D 11
关于教程和示例,请尝试DirectX SDK Samples Catalog。