2

我正在制作基于精灵的格斗游戏,并且开发已经到了一定程度,我想在运行时实现图像的颜色交换(因此用户可以通过界面指定,应该将确切的颜色更改为什么,它会在瞬间完成,不会被加载屏幕中断)。我认为它在像素着色器中很容易实现。我试过了,通过设置值来专门改变另一种颜色,效果很好。对于下一步,我想让它从文本文件中读出数据(包含要更改的颜色的颜色代码,然后是要更改的颜色)。它有几个条目,它存储在一个数组中,如下所示:

XMFLOAT3 palette[10][2];

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

float4 xPalette[10][2];

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

4

1 回答 1

1

您可以将交换作为纹理本身发送,也许第一行纹素是您要替换的纹素,而 [x][y+1] 作为您要将其更改为的颜色。(由于纹理坐标的范围从 0 到 1,您可能必须将要替换的颜色数作为整数传递,然后您可以使用 (1/replaceCount*i) 进行索引。GLSL 允许您使用 sampler2D 的 I 传递纹理想想。我想它与 HLSL 相似(虽然我写 HLSL 已经几个月了。:()

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

于 2013-02-12T17:11:35.067 回答