像素着色器中的Sprite颜色调色板交换

时间:2013-02-12 17:07:28

标签: c++ directx-11 fragment-shader

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

XMFLOAT3 palette[10][2];

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

float4 xPalette[10][2];

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

1 个答案:

答案 0 :(得分:1)

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

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