これまでに見つけた最も可能性の高いオプションは、を使用GetData()
してから新しいSetData()
にコピーすることですRenderTarget2D
Texture2D.
ミップ マップされたテクスチャが必要なので、各ミップ レベルを個別に新しいテクスチャにコピーする必要があることがわかりました。これを行わないと、ミップ マップにデータがないため、オブジェクトから離れるとオブジェクトが黒くなります。レンダー ターゲットもミップ マップする必要があることに注意してください。
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);
}