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

时间:2012-10-09 14:37:43

标签: graphics shader textures direct3d hlsl

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

1 个答案:

答案 0 :(得分:0)

他们发现这样做的唯一方法是锁定和解锁矩形方法。但这比我最初想的要容易得多。这是我填充纹理的方式。         '为抖动着色器创建随机纹理         rando =新的随机()         randomText =新纹理(设备,1000,1000,1,Usage.Dynamic,     Format.A16B16G16R16,Pool.Default)         “89599         “89510         昏暗数据(1000 * 1000 * 8 + 1000 * 63 + 936)As Byte         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 64bit纹理,所以你会认为我需要1000 * 1000 * 8字节的数据,但我需要额外的63936字节来填充纹理,我不知道为什么。但它似乎符合我的需要。