【问题标题】:Erase part of RenderTarget when drawing primitives?绘制图元时擦除部分 RenderTarget?
【发布时间】:2012-08-29 09:37:36
【问题描述】:

我正在使用 XNA 创建一个类似于绘画的应用程序。

我有一个作为画布的渲染目标。当用户绘制一些东西时,我使用DrawUserPrimitives 和三角形条绘制相应的三角形来制作线条和其他曲线。

我想在应用程序中实现一个橡皮擦,以便用户可以从纹理中擦除三角形。我过去使用过 OpenGL,我会使用这样的混合函数:glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);

我将如何在 XNA 中执行此操作?我尝试将GraphicsDevice 混合模式设置为AlphaBlend、Additive 等。但它不起作用。有什么想法吗?

【问题讨论】:

  • 擦除三角形?或者使渲染目标的某些像素透明?前者不适用于渲染目标。
  • 我想让渲染目标的像素透明。

标签: c# graphics xna


【解决方案1】:

如果您将代码更改为使用Texture2D 而不是RenderTarget2D,则可以使用RenderTarget2D.GetTexture() 从RenderTarget2D 获取像素数据。

当然,这可能会影响性能,但如果您可以通过减少执行次数的方式优化代码,例如临时绘制背景颜色而不是实际擦除,然后迭代通过鼠标释放后的像素,你可以让它工作。

可能有更好的方法,但我找不到。

【讨论】:

  • 我明白了。我真的很想避免这样做,因为在我的情况下,这会影响性能,即使您建议进行优化。也许有一种方法可以使用混合模式或其他方式来实现这一点?
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多