各ピクセルのピクセル シェーダーに 3 つの新しいランダムなフロートを取得しようとしています。ここ、ここ、および ここで読んだ内容に基づいて、ランダムな RGB 値を含む大きなテクスチャを生成し、各描画呼び出し中にランダムにテクスチャ座標オフセット値をいくつか生成して、疑似ランダム効果を生成する必要があると考えています。 . LockRect および UnlockRect API を使用してこれを行う唯一の方法はありますか? ないことを願っています。
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) as Byte 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 に答える