我正在使用XNA创建一个类似绘画的应用程序。
我有一个渲染目标,它充当画布。当用户画东西时,我用DrawUserPrimitives
和三角形条画出相应的三角形,以形成直线和其他曲线。
我想在应用程序中实现一个橡皮擦,这样用户就可以从纹理中擦除三角形。我过去使用过OpenGL,在那里我只会使用这样的混合函数:glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
在XNA中我该怎么做?我尝试将GraphicsDevice
混合模式设置为AlphaBlend
、Additive
等,但没有成功。有什么想法吗?
如果将代码更改为使用Texture2D
而不是RenderTarget2D
,则可以使用RenderTarget2D.GetTexture()
从RenderTarget2D
获取像素数据。
当然,性能可能会受到影响,但如果你能优化代码,减少这样做的次数,比如临时绘制背景色而不是实际擦除,然后在鼠标释放后迭代像素,你就可以让它工作了。
可能有更好的方法,但我找不到。