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

采样器 姓名 = 采样器类型 { 纹理 = <纹理变量>; [州名 = 状态值;] ... };

...

采样器类型

[in] 采样器类型,为以下类型之一: 采样器, 采样器1D, 二维采样器, 采样器3D, 采样器CUBE, 采样器状态, 采样器状态.

Direct3D 9 和 Direct3D 10 之间的差异:

Direct3D 10 支持一种附加采样器类型: 采样器比较状态.

我的感觉与这篇文章相反, SamplerState 仅DX10。几乎我看到的所有代码都使用 sampler_state 为了 采样器类型. 。BasicHLSL (DX9) 的一个简单示例:

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

为什么存在所有不同的 _SamplerType_s 以及您何时使用,例如, sampler 或者 sampler2D 代替 sampler_state?无论如何,在获取时您需要明确,例如 tex2D, texCUBE, ,那么这是怎么回事呢?

有帮助吗?

解决方案

你说得对。这很奇怪。

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

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

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

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

其他提示

采样器名称 = SamplerType { 纹理 = ;[状态名称=状态值;]};

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top