像素着色器中的精灵调色板交换

Sprite Color palette swap in Pixel Shader

本文关键字:精灵 调色板 交换 像素      更新时间:2023-10-16

我正在制作一款基于精灵的格斗游戏,开发已经到了一个地步,我想在运行时实现图像的颜色交换(这样用户就可以通过界面指定应该将什么颜色更改为什么颜色,并且会在不受加载屏幕干扰的情况下立即完成)。我认为在像素着色器中可以很容易地实现。我尝试了一下,通过设置值来改变其他颜色,效果很好。在下一步中,我想从文本文件中读取数据(包含要更改的颜色的颜色代码,然后是要更改为的颜色)。它有几个条目,存储在一个数组中,如下所示:

XMFLOAT3 palette[10][2];

这是着色器中对应的常量条目:

float4 xPalette[10][2];

这意味着,它存储了10种要更改的颜色和10种要将其更改为的颜色。我通过一个常量缓冲区将其传递给Pixel Shader,但它没有按计划工作,因为只有数组的最后一个条目被识别,其他所有条目都是零。我想这是因为在将数据发送到GPU之前的16位对齐?还有什么其他方法可以将这样的数据发送到像素着色器?感谢您通读这篇文章!

您可以将交换作为纹理本身发送,可能最上面一行的纹素是您想要替换的,[x][y+1]是您想要将其更改为的颜色。GLSL可以让你用sampler2D来传递纹理。我想这与HLSL类似(尽管我写HLSL已经几个月了。:()

然后,您可以在着色器期间对顶行中的每个纹素进行采样/比较。