【问题标题】:Sampling custom float texture2D in HLSL在 HLSL 中对自定义浮点纹理 2D 进行采样
【发布时间】:2014-03-17 03:01:19
【问题描述】:

我想知道如何对传递给着色器文件的数据进行实际采样。我使用了两种方法,两者都一样吗?是否有任何在线资源可供我实际阅读此类内容?

在 5.0 编译,但版本号并不重要。


我有两种方法来传递数据。

第一个;

    for( UINT row = 0; row < textureDesc.Height; row++ )
    {
        UINT rowStart = row * mappedResource.RowPitch;
        for( UINT col = 0; col < textureDesc.Width; col++ )
        {
            //width * number of channels (r,g,b,a)
            UINT colStart = col * 4;
            pTexels[rowStart + colStart + 0] = 10.0f; // Red
            pTexels[rowStart + colStart + 1] = 10.0f; // Green
            pTexels[rowStart + colStart + 2] = 255.0f; // Blue
            pTexels[rowStart + colStart + 3] = 255.0f; // Alpha
        }
    }

第二个;

    float elements[416][416];
    int elementsCount = 416*416;

    for( int i = 0; i < 416; i++ )
    {
        for( int k = 0; k < 416; k++ )
        {
            elements[i][k] = 0;
        }
    }

    memcpy(mappedResource.pData, elements, sizeof(float) * elementsCount);

【问题讨论】:

  • 贴图好像是手动创建的,如果要简化流程,为什么不把它和文件一样用DirectX加载呢?
  • @Dino (1) 着色器中的采样并不关心您将数据复制到纹理中的准确程度。因此,如果您以不同的方式复制相同的数据,对于 HLSL 来说都是一样的。 (2) 不太清楚您要阅读的内容。您只需要样本纹理吗?然后使用Texture.Sample(Sampler, texcoord)。您需要采样教程吗? google 上有很多内容。请准确回答您的问题以获得有意义的答案。
  • zdd 我需要手动创建,每帧都会更新。 @Drop我可以简单地对其进行采样,它会知道它包含一个浮点数?即使这些浮点数是使用 memcpy 设置的?我的问题实际上是如何访问着色器文件中的数据。所以要获得 element[x][y] 它将是 float val = Texture.Sample(Texture, texcoord)?我只是不确定 GPU 将如何解释纹理中的数据或预期的数据,所以我不确定如何在着色器文件中读取它。
  • 采样在很多方面都不同于数组访问。如果您查看了上面的链接,您会看到 Texture.Sample(Texture, texcoord) 将根据创建纹理时使用的 DXGI_FORMAT 返回类型值。将纹理用作数组时存在一些问题。如果您需要在 HLSL 方面有点像 C 数组,请使用 StructuredBuffers(需要 SM 5.0,仅限 SM 4.0)。
  • @Drop 我在阅读链接之前回复了它,我已经阅读了我传递给我只是忘记回复的纹理的数据。 StructuredBuffers 是否比用作数组的采样纹理更有效? - 作为旁注感谢所有的帮助。

标签: directx shader hlsl directx-11


【解决方案1】:

似乎我错过了所有这些的重要部分。

创建纹理时,在纹理描述中,Format 是对象被采样时将返回的类型。非常感谢 Drop 的帮助。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多