【问题标题】:How do you reliably (u,v) index a texture as a 2d array of vectors?您如何可靠地(u,v)将纹理索引为二维向量数组?
【发布时间】:2011-12-15 12:59:20
【问题描述】:

使用着色器模型 5/D3D11/HLSL。

我想将 2D 纹素数组视为向量的 2D 矩阵

      u
v (1,4,3,9)   (7, 5.5, 4.9, 2.1)

(每个纹素是一个 4 分量向量)。对于不同的着色器,我需要访问纹理中数据的特定范围。因此,纹理中要访问的范围自然应该被索引为 u,v 分量。

我将如何在 HLSL 中做到这一点?我在想以下几点:

  • 按正常方式创建纹理
  • 将矢量值加载到纹理中(每个纹素 1 个矢量)
  • 关闭所有线性插值进行纹理采样(“最近邻”)
  • 在着色器中,使用纹理坐标查找您需要的向量

唯一让我感到不安的是,当我使用浮点 u's 和 v's 索引纹理时是否会引入奇怪的错误。

如果纹理是 1024x1024 纹素,并且我试图索引 (3,2)->(3,7),那将是 u=(3/1024,2/1024)->(3/1024 ,7/1024) 感觉有点不稳定。有没有办法通过 int 组件索引纹理?或者它会很好地工作吗?

Texture2DArray

不想为此使用 GPGPU 框架(所以请不要 CUDA 建议:)。

【问题讨论】:

  • 您期望什么样的内存访问模式?纹素指数从何而来?微软对 GPGPU 的回答可能值得一看 DirectCompute(ComputeShader)
  • 我确实看过DirectCompute,很酷

标签: gpu gpgpu direct3d11


【解决方案1】:

您可以在 hlsl 5.0 中使用 operator[] 来完成

See here

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2021-01-31
    • 2022-01-05
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多