如何使用随机 RGB 值填充 Direct3D 纹理.用于 HLSL 像素着色器



我正在尝试为每个像素在像素着色器中获取 3 个新的随机浮动。根据我在这里、这里和这里读到的内容,我认为我需要生成一个包含随机 RGB 值的大纹理,然后在每次绘制调用期间随机生成几个纹理坐标偏移值以产生伪随机效果。通过 LockRect 和 UnlockRect API 做到这一点的唯一方法是什么?我希望不会。

我发现这样做的唯一方法是锁定和解锁矩形方法。但这比我最初想象的要容易得多。这是我填充纹理的方式。 '为抖动着色器创建随机纹理 兰多 = 新随机() randomText = New Texture(device, 1000, 1000, 1, Usage.Dynamic, 格式.A16B16G16R16,池默认) '89599 '89510 暗淡数据(1000 * 1000 * 8 + 1000 * 63 + 936) 作为字节 兰多。下一页字节(数据)

    Dim dataBox As DataRectangle =
randomText.GetSurfaceLevel(0).LockRectangle(LockFlags.None)
    dataBox.Data.Seek(0, IO.SeekOrigin.Begin)
    dataBox.Data.Write(data, 0, data.Length)
    dataBox.Data.Close()

正如您从代码中看到的那样,我不得不添加大量额外的字节才能用随机值完全填充纹理。我使用了 1000 x 1000 64 位纹理,所以你会认为我需要 1000*1000*8 字节的数据,但我需要额外的 63936 字节来填充纹理,我不确定为什么。但它似乎适合我的需求。

相关内容

  • 没有找到相关文章