簡體   English   中英

渲染到texture2d XNA

[英]Render to a texture2d XNA

我需要在texture2d中渲染一個精靈,以便稍后可以在屏幕上渲染該紋理,但是同時我需要訪問此修改后的紋理的像素,因此,如果我在紋理中添加一個精靈,在精靈所在的坐標中調用get pixel函數,然后應該給我與該精靈對應的新像素值(已將其與texture2d混合)。

我正在使用xna 4.0而不是3.5或更小。

謝謝。

等效於GDI中的Graphics.FromImage(img).DrawImage(...

我嘗試了這個但失敗了

public static Texture2D DrawSomething(Texture2D old, int X, int Y, int radius) {
var pp = Res.game.GraphicsDevice.PresentationParameters;
var r = new RenderTarget2D(Res.game.GraphicsDevice, old.Width, old.Height, false, pp.BackBufferFormat, pp.DepthStencilFormat,
pp.MultiSampleCount, RenderTargetUsage.DiscardContents);
Res.game.GraphicsDevice.SetRenderTarget(r);
var s = new SpriteBatch(r.GraphicsDevice);
s.Begin();
s.Draw(old, new Vector2(0, 0), Color.White);
s.Draw(Res.picture, new Rectangle(X - radius / 2, Y - radius / 2, radius, radius), Color.White);
s.End();
Res.game.GraphicsDevice.SetRenderTarget(null);
return r;
}

Res.game基本上是指向主要游戲形式的指針,而Res.picture是隨機texture2d

如果可能,請避免每次都創建一個新的渲染目標。 在方法之外創建它,然后重復使用以獲得最佳性能。

這里是一些偽代碼:

public Texture2D DrawOnTop(RenderTarget2D target, Texture2D oldTexture, Texture2D picture)
{
    SetRenderTarget(target);

    Draw(oldTexture);
    Draw(picture);

    SetRenderTarget(null);

    return target;
}

如果大小經常變化並且您無法重用目標,則至少要處置前一個目標,如在注釋中匿名建議的那樣。 每個新目標都將消耗內存,除非您及時釋放資源。 但是在着色器中使用它或進行任何您想使用的着色器后,將其丟棄。 一旦處置,它就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM