Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';我想不出DirectX11的着色器?_C++_Windows_Directx 11_Direct3d11 - Fatal编程技术网

C++ Can';我想不出DirectX11的着色器?

C++ Can';我想不出DirectX11的着色器?,c++,windows,directx-11,direct3d11,C++,Windows,Directx 11,Direct3d11,所以,我不知道如何使用着色器。编写它们很容易,但实际上并没有使用它们。MSDN对我来说真的没用,这意味着他们有最差的教程。我现在正在读弗兰克·卢纳的Direct3d 11书,我终于开始真正画东西了。令人兴奋,除了它不起作用之外。他的BoxDemo——我肯定在3年前写这本书的时候就开始工作了,但现在有了所有新的DirectX东西——省略了DirectX SDK,现在使用“Windows SDK”,FX被弃用,没有更多的D3DX库。。。太令人沮丧了。我继续,并降级到DirectX 2010 SDK-

所以,我不知道如何使用着色器。编写它们很容易,但实际上并没有使用它们。MSDN对我来说真的没用,这意味着他们有最差的教程。我现在正在读弗兰克·卢纳的Direct3d 11书,我终于开始真正画东西了。令人兴奋,除了它不起作用之外。他的BoxDemo——我肯定在3年前写这本书的时候就开始工作了,但现在有了所有新的DirectX东西——省略了DirectX SDK,现在使用“Windows SDK”,FX被弃用,没有更多的D3DX库。。。太令人沮丧了。我继续,并降级到DirectX 2010 SDK-只是为了让我可以实际使用教程。几乎每个D3D教程都使用D3DX库

无论如何。。。现在回答我的问题。VisualStudio有一个生成.hlsl文件的选项。但是,它还具有生成.fx文件的功能(如果您只需在它创建的.fx文件名的末尾键入.fx)。 因此,我可以使用弃用的.fx方法,并学习如何在所有的教程中轻松地使用它——或者我可以学习新的HLSL方法,并在没有教程的情况下尝试学习它,这是最困难、最令人沮丧的

我知道他们都使用HLSL语言。但它们在程序中的使用方式不同。(CreateEffectFromMemory、CompileFromFile等)。 我有点希望学习新的方法,但如果我不这样做,那就好了。尽管如此,我几乎有一个使用.fx文件的完整程序。我确信它会起作用,但我只需要帮助构建和利用“Effects11.lib”


很抱歉在帖子上拖了这么长时间——事实上,我确信我会在一段时间内收到任何回复——如果我真的收到了回复的话——因为篇幅太长。我很沮丧,因为学习DirectX使我的编程生涯在过去的两个月里陷入了巨大的停顿。请并感谢您的帮助

文件扩展名
.hlsl
.fx
是任意的。这就像
.cpp
cxx
之间的区别。历史上,
.fx
用于HLSL着色器,其中包括顶点着色器、像素着色器和效果(fx)技术/过程,
.HLSL
是一个不包括效果(fx)技术/过程的文件,但只是一个约定。这两种方法都有很多

重要的是文件如何编译。如果使用
fx_5_0
,则需要Effects 11运行时才能实际使用它们。这本身真的没什么特别的。它只需为您为特效(FX)技术/过程提供的
compile
语句的每个组合调用相同的编译器,并将其与一些元数据捆绑在一起。事实上,您通常可以使用
vs_5_0
ps_4_0
之类的方法在包含技术/和过程的
.fx
文件上调用FXC编译器,如果参数正确,它将编译相应的特定于阶段的着色器

RE:effects 11

Effects 11的主要问题是,它在运行时需要D3DCompile DLL,因为它使用D3DCompile DLL提取连接状态和着色器所需的元数据。当您实际部署应用程序时,此D3DCompile DLL不可用于Windows 8.0和Windows phone 8.0中的Windows应用商店应用程序,仅在您开发应用程序时可用。因此,Effects 11不适用于这些平台

对于Windows 8.1或Windows phone 8.1的Windows应用商店应用程序来说,这不再是一个技术问题,但对
fx_5_0
的编译器支持仍然不受欢迎。其他配置文件
vs_5_0
等都存在一些问题。因此,只要您了解它的局限性,是否使用它取决于您自己

特效11的最新版本已启用,我将讨论其中的限制。有一些简单的方法可以使用它,还有一些。这个版本的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年就推出了。向Windows8SDK的过渡发生在2012年,大多数开发人员(更不用说图书出版商)错过了它。我桌上有那本书的笔记

有关“现代”备选方案的完整列表,请参阅

对于Win32桌面应用程序,您可以继续使用旧版DirectX SDK。需要注意的主要问题是,对于VS 2012和VS 2013附带的Windows 8.x SDK,
include
lib
路径顺序与VS 2010相反。有关详细信息,请参阅

RE:学习Direct3D 11

你看过报纸了吗


至于教程和示例,请尝试。

文件扩展名
.hlsl
.fx
是任意的。这就像
.cpp
cxx
之间的区别。历史上,
.fx
用于HLSL着色器,其中包括顶点着色器、像素着色器和效果(fx)技术/过程,
.HLSL
是一个不包括效果(fx)技术/过程的文件,但只是一个约定。这两种方法都有很多

重要的是文件如何编译。如果使用
fx_5_0
,则需要Effects 11运行时才能实际使用它们。这本身真的没什么特别的。它只需为您为特效(FX)技术/过程提供的
compile
语句的每个组合调用相同的编译器,并将其与一些元数据捆绑在一起。事实上,您通常可以在
.fx
文件c上调用FXC编译器