【问题标题】:How to fill a Direct3D texture with random RGB values. For use in a HLSL pixel shader如何使用随机 RGB 值填充 Direct3D 纹理。用于 HLSL 像素着色器
【发布时间】:2012-09-29 22:15:59
【问题描述】:

我正在尝试为每个像素在像素着色器中添加 3 个新的随机浮点数。根据我读过的 hereherehere,我相信我需要生成一个包含随机 RGB 值的大纹理,然后在每次绘制调用期间随机生成几个纹理坐标偏移值以产生伪随机效应。是通过 LockRect 和 UnlockRect API 做到这一点的唯一方法吗?我希望不是。

【问题讨论】:

    标签: graphics shader textures direct3d hlsl


    【解决方案1】:

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

        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 字节来填充纹理,我不知道为什么。但它似乎可以满足我的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 2012-02-16
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多