【问题标题】:DirectX 9 HLSL Texture Sampling IssuesDirectX 9 HLSL 纹理采样问题
【发布时间】:2011-06-19 14:33:02
【问题描述】:

我正在使用托管的 DirectX 2.0(我相信它与 DirectX9 相同)制作应用程序,并且我是 HLSL 的新手,所以如果我正在做的事情是愚蠢的,我很抱歉。我正在编写一个简单的像素着色器,它只是将存储的纹理(分配为全局变量)输出到屏幕,但我发现它正在渲染传递给它的纹理(我也在传递不同的渲染纹理,这个着色器是一个测试着色器)。

我的HLSL代码如下:

texture inputTex;
sampler2D InputSampler = sampler_state
{
    Texture = <inputTex>;
};
texture DepthTexture;
sampler2D DepthSampler = sampler_state
{
    Texture = (DepthTexture);
    MinFilter = Linear;
    MagFilter = Linear;
    MipFilter = Linear;   
    AddressU  = Clamp;
    AddressV  = Clamp;
};
float4 testPass(float2 TextureCoordinate : TEXCOORD0) : COLOR0
{
    float4 new_color = saturate(tex2D(DepthSampler,TextureCoordinate));
    new_color.a=1;
    return new_color;
}
technique DoF
{
    pass Pass0
    {
        PixelShader = compile ps_2_0 testPass();
    }
}

而我的 C# 是:

postProc.SetValue("DepthTexture", DepthTexture);
postProc.Begin(FX.DoNotSaveState);
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
device.BeginScene();
{
    postProc.SetValue("inputTex", RenderTexture);
    postProc.CommitChanges();
    postProc.BeginPass(0);
    sprite.Draw(RenderTexture, new Rectangle(0, 0, WINDOWWIDTH, WINDOWHEIGHT), new Vector3(0, 0, 0), new Vector3(0, 0, 0), Color.Black);
    postProc.EndPass();
    postProc.End();
    sprite.End();
}
device.EndScene();
device.Present();

输出是存储在 RenderTexture 中的任何内容,而不是存储在 DepthTexture 中的内容,这是它应该做的。我尝试在这一行中将 RenderTexture 与 DepthTexture 交换:

sprite.Draw(RenderTexture, new Rectangle(0, 0, WINDOWWIDTH, WINDOWHEIGHT), new Vector3(0, 0, 0), new Vector3(0, 0, 0), Color.Black);

输出是 DepthTexture,所以它显然是从那里获取数据并且纹理格式正确。

有人知道如何告诉 HLSL 何时从传入的纹理中采样以及何时从绘制的数据中采样的任何好的教程吗?

【问题讨论】:

  • TBH 托管 DX 不受支持。使用 SlimDX 会好得多。
  • 当然这对着色器如何采样纹理没有影响并且与我的问题无关?

标签: c# directx textures hlsl sampling


【解决方案1】:

我认为 Sprite 会忽略效果状态——它只是将您指定的纹理部分复制到给定位置。它不运行当前着色器。看起来您只是想用当前效果绘制一个窗口大小的四边形;而不是使用 Sprite,您可能只想直接使用 Device.DrawPrimitives。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多