9

我目前正在使用 DX9/SM3,关于HLSL 采样器的 MSDN 文档似乎非常缺乏解释如何使用不同的采样器类型。更糟糕的是,他们试图在一篇文章中涵盖 DX9 和 DX10,所以他们将所有关键词混在一起:

采样器名称= SamplerType { Texture = < texture_variable >; [ state_name = state_value ;] ... };

...

采样器类型

[在] 采样器类型,它是以下之一:samplersampler1Dsampler2Dsampler3DsamplerCUBEsampler_stateSamplerState

Direct3D 9 和 Direct3D 10 之间的区别:

Direct3D 10 支持一种额外的采样器类型:SamplerComparisonState

我觉得与这篇文章相反,SamplerState只有 DX10。我看到的几乎所有代码都sampler_state用于SamplerType。BasicHLSL (DX9) 中的一个简单示例:

sampler MeshTextureSampler =
sampler_state
{
    Texture = <g_MeshTexture>;
    MipFilter = LINEAR;
    MinFilter = LINEAR;
    MagFilter = LINEAR;
};

为什么所有不同的 _SamplerType_s 都存在,你什么时候使用,比如说,sampler或者sampler2D代替sampler_state?无论如何,您在获取时都需要明确,例如tex2D, texCUBE,那么这里发生了什么?

4

2 回答 2

4

你是对的。这很奇怪。

似乎有关 DirectX 9 语法的文档是错误的。我绝不是 HLSL 或 DirectX 方面的专家,但我一直只看到 DirectX 9 中的采样器是这样声明的:

SamplerType Name = sampler_state{   Texture = <texture_variable>;   [state_name = state_value;]   ... }; 

我可能遗漏了一些东西,但对我来说,上述语法比文档中的语法更有意义。您声明具有给定类型的采样器,并指定采样器状态。

更新:显然这是错误的。我已经在官方论坛上发起了一个帖子,到目前为止,我只得到确认它是错误的。我还直接向 DirectX 团队发送了一封邮件。只是为了安全起见。

于 2009-08-19T20:16:27.023 回答
0

采样器名称 = SamplerType { 纹理 = ; [state_name = state_value;]};

它是正确的!该声明仅对效果有效。

编辑:官方论坛在 MSDN 上。您可以使用“社区添加”发布建议或错误。

于 2014-02-24T22:20:13.420 回答