XNA添加弹坑(通过GPU)时,使用;“燃烧”;影响
我目前正在XNA中开发一个2D“蠕虫”克隆,其中一个功能是“可变形”地形(例如,当火箭击中地形时,会发生爆炸,一块地形消失) 我目前是如何做到这一点的,是通过使用一个纹理,当它接近中心时,它的红色值会逐渐升高。我循环遍历“变形”纹理的每个像素,如果当前像素与地形像素重叠并且具有足够高的红色值,我将表示地形的颜色数组修改为透明。如果当前像素没有足够高的红色值,我会将地形颜色变黑(红色值越接近阈值,颜色越黑)。在该操作结束时,我使用SetData更新地形纹理 我意识到这不是一个很好的方法,不仅因为我读到了关于管道停顿之类的东西,而且因为如果同时添加大量的火山口,它可能会变得相当滞后。我想在GPU上重新生成陨石坑,而不是在目标和要修改的纹理之间使用渲染目标“乒乓”。这不是问题,我知道怎么做。问题是我不知道如何使用这种方法保持我的烧伤效果 下面是燃烧效果现在的样子:XNA添加弹坑(通过GPU)时,使用;“燃烧”;影响,xna,effects,textures,Xna,Effects,Textures,我目前正在XNA中开发一个2D“蠕虫”克隆,其中一个功能是“可变形”地形(例如,当火箭击中地形时,会发生爆炸,一块地形消失) 我目前是如何做到这一点的,是通过使用一个纹理,当它接近中心时,它的红色值会逐渐升高。我循环遍历“变形”纹理的每个像素,如果当前像素与地形像素重叠并且具有足够高的红色值,我将表示地形的颜色数组修改为透明。如果当前像素没有足够高的红色值,我会将地形颜色变黑(红色值越接近阈值,颜色越黑)。在该操作结束时,我使用SetData更新地形纹理 我意识到这不是一个很好的方法,不仅因为我
有人知道我将如何创造类似的燃烧效果(使形成的陨石坑周围的边缘变暗)吗?我对着色器完全不熟悉,但如果需要的话,如果有人教我如何做,我会非常感激。如果还有其他方法也很好。听起来你的方法很好。但是你用手做了很多事情,这也可以通过绘制精灵和应用正确的公式来完成 例如:
假设您的地形保存到纹理alpha通道中的巨型纹理中。1是地形,0什么都不是 发生爆炸,地形必须变形。只需在纹理上绘制一个黑色透明球体(或爆炸区域),即可轻松更新纹理。地形消失了,因为alpha值是黑色球体的0。你的纹理现在是最新的,一切都是由spriteBatch完成的。什么都不需要检查 我不知道你是否也想要一个解决方案,但现在你有了 对于燃烧效果
现在我们在纹理中有了地形,我们可以通过使用着色器(就像你说的那样)对图形进行后期效果。着色器获得纹理的alpha通道,现在可以执行不同的操作以获得燃烧效果
建议阅读: