所以,我正在尝试使用SFML创建一个Warcraft II RTS克隆。我现在完成了我的菜单,一个菜单应该支持12种不同的播放器,因此有12种不同的颜色,但是我在从互联网上下载的不同精灵的颜色上有问题,并且可能为每个单元/建筑物加载12个不同的png文件浪费大量时间和记忆。
我在这个主题上看到了许多不同的建议,但它们似乎不切实际或者真的很难做到。
这些是我得到的精灵的一些例子
此处还有完整项目的链接(但这不包括有关这些精灵的有用信息,因为只有菜单已完成): https://github.com/lori2001/Warcraft-II---clone/tree/master
欢迎任何建议! :)
答案 0 :(得分:1)
您发布的第二张图片表示关键字:除了底部指示的四种颜色外,字符相同。 因此,您可以预处理精灵表并将它们分成调色板位和非调色板位。
之后你做的事取决于你;最简单的可能是为每种颜色生成一个新的精灵表,并在渲染给定颜色的单位时使用正确的精灵表。在OpenGL术语中,我会想到一个3D纹理,其中第一个维度是颜色。
或者,您可以使用RGBA纹理并使用Alpha通道标记调色板位;然后渲染就像
那样if (pixel.a == 1.0) {
outputColor = vec4(pixel.rgb, 1.0);
} else {
int idx = pixel.r / 0.25;
outputColor = vec4(palette[idx].rgb, 1.0);
}
其中pixel
是精灵表中的像素,palette
是包含四个RGB值的着色器统一。 alpha值为1将保留输入像素,而[0,0.25,0.50,0.75]中的任何一个将使用相应的调色板索引。