1

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

4

1 回答 1

0

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

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

于 2012-10-26T12:51:24.817 回答