韦易笑,二十年老程序员 游戏中的惯用做法叫:调色盘色彩旋转 1. 调色盘里能变色的颜色总是固定几个位置 2. 让需要变色的位置的 RGB 转换成 HSV,然后旋转 H 分量旋转一定角度 3. 重新将 HSV 转换为 RGB 保存回调色盘 在 HSV 色彩空间中,旋转 H 分量 主要是旋转 H 分量,S/V 分量也可以微调,但是变色是以旋转 H 为主。题主两张图片的八神,除了调色盘前面几个皮肤颜色不参与变色外,后面的衣服整体都参与了色彩旋转。 看看是不是和我上面模拟的 DEMO 差不多 --- 所有衣服颜色的 H 分量 都差不多旋转了 300 多度 (除了裤子外,观察衣服颜色的变化)。可以看出,拳皇的衣服变色就是这么生成的,当然游戏自动生成好了以后,也可以让你自己微调一下。 所以这样不但有紫色八神,还能轻松有蓝色,黄色,绿色的八神。好多游戏的头发衣服的即时变色基本都是这个套路。包括 Windows 下 好多界面变色也是用色彩旋转实现,只是不用调色盘了: 现代绘图,没有调色盘,依然要变色,一般是将变色的部件和不变色的部件分为两层来绘制,不变色的是一层,变色的是另外一层: 比如上面这个按钮,中间两个状态是参与变色的底图,但是还有一些不改变的,比如 X 和汉字,如果一起参与变色就搞笑了,所以还需要一层不变色的覆盖在上面,就是最左边那个层。所以界面变色,文字和图标不会改变。 或者根据变色不同拆分成不同的部件,让其中某一个部件变色 坦克身子:参与变色 (不同的国家会旋转成不同的颜色) 坦克炮管:不参与变色(都是一样的) PS:有些地方也会用 HSL 空间色彩旋转代替 HSV 色彩空间旋转,差不多,看你喜好。 查看知乎原文