Я вижу, что вы пометили это XNA, поэтому предположим, что это ваш API (хотя этот ответ вполне может быть применен к любому подходу OpenGL / D3d с соответствующими вызовами). Если вы хотите сделать это элегантно, я предлагаю использовать временную RenderState
. Вы бы переключились на новый RenderState и нарисовали исходную текстуру фона, а затем нарисовали спрайты кратера сверху (вы можете изменить свойства AlphaSourceBlend
и AlphaDestinationBlend
RenderState, чтобы создать искомый вычитающий эффект). *
Как только вы закончите рисовать, вы можете легко извлечь RenderState как текстуру, используя функцию GetTexture()
.
Имейте в виду, что если вы изменяете режимы наложения, ваш SpriteBatch должен работать в «немедленном» режиме (я забыл термин XNA, но тот, где он не выполняет упорядочение спрайтов для эффективности), иначе будет сброшен неожиданно.