如何根据游戏活动来控制纹理外观?

在我正在开发的FPS中,我正在程序上改变基于游戏事件的纹理外观,并想知道我实施这个方法是否是一个好主意。

现在,在每一帧,我抓住一个指向未压缩的图像,并使用memset写入它。 如果我想让游戏中的事件影响纹理的外观,这是非常简单的,因为我所要做的就是将我喜欢的任何属性从任何游戏对象绑定到写入图像数据的函数中。 例如,使用这个我可以得到玩家的x,y位置,并在玩家移动时直接绘制一个x地图贴图。

总体来说有没有更好的方法来实现这个function?

我的第一个想法是使用着色器,但是我一直没能find任何这样做的人,而且我对着色器几乎一无所知。 我觉得我可能会错过对某人来说显而易见的事情。

我试图保持这个问题尽可能独立于引擎,但如果相关的话,我正在使用Source Engine程序的材料。

在CPU上修改纹理通常非常缓慢。 你想要做的是使用“渲染到纹理”(Render to Texture) – 在着色器中使用程序中的数据渲染到不是屏幕(渲染目标)的东西。

以您的小地图为例,在播放器上绘制X就像将地图背景纹理,X纹理和播放器位置发送给着色器一样简单,然后根据播放器的pos来混合这两个(任何标记X的地方小地图纹理,里面的东西都是X,在地图上面混合了alpha,如果我理解了这个想法)。 你发送给你的函数的任何参数,用memset改变纹理,你现在把它作为一个常量缓冲区发送给着色器。

这也适用于其他types的纹理(比如你所说的映射,模型,像士兵),因为你可以渲染纹理原始纹理和其他东西,然后发送新的纹理作为你在模型上映射的纹理。

我不是源的专家,但这似乎很有用: https : //developer.valvesoftware.com/wiki/Adding_a_Dynamic_Scope