ほとんどのオプションは、私がMIPはテクスチャをマッピングしたいので新しいTexture2D.
へRenderTarget2D
からコピーするGetData()
とSetData()
を使用することです、私は、各ミップレベルをコピーするために持っていたことが分かりましたそのように新しいテクスチャに個別にこれをしないと、オブジェクトはミップマップにデータがないので、離れていくと黒くなります。レンダーターゲットは、ミップマッピングされている必要があります。
Texture2D copy = new Texture2D(graphicsDevice,
renderTarget.Width, renderTarget.Height, true,
renderTarget.Format);
// Set data for each mip map level
for (int i = 0; i < renderTarget.LevelCount; i++)
{
// calculate the dimensions of the mip level.
// Math.Max because dimensions always non-zero
int width = (int)Math.Max((renderTarget.Width/Math.Pow(2, i)), 1);
int height = (int)Math.Max((renderTarget.Height/Math.Pow(2, i)), 1);
Color[] data = new Color[width * height];
renderTarget.GetData<Color>(i, null, data, 0, data.Length);
copy.SetData<Color>(i, null, data, 0, data.Length);
}
RenderTargetsは暗黙的にTexture2Dに変換されませんか?同様に、Texture2D tex = myRenderTargetはうまくいくはずです。いずれにせよ、SetData()は高価なプロセスです。 –
私が質問したように、ここでの目標は、フルスクリーンになるなど、RenderTarget2Dsが失われるため、無期限に使用できる不揮発性の「Texture2D」を得ることです。 –
+1、これは私が与えた答えです。 @ A型の 'SetData'は、それをフレームごとに行うのは高価です。しかし、ロード時にそれほど悪くはありません。 –