像素着色器中的精灵调色板交换
Sprite Color palette swap in Pixel Shader
我正在制作一款基于精灵的格斗游戏,开发已经到了一个地步,我想在运行时实现图像的颜色交换(这样用户就可以通过界面指定应该将什么颜色更改为什么颜色,并且会在不受加载屏幕干扰的情况下立即完成)。我认为在像素着色器中可以很容易地实现。我尝试了一下,通过设置值来改变其他颜色,效果很好。在下一步中,我想从文本文件中读取数据(包含要更改的颜色的颜色代码,然后是要更改为的颜色)。它有几个条目,存储在一个数组中,如下所示:
XMFLOAT3 palette[10][2];
这是着色器中对应的常量条目:
float4 xPalette[10][2];
这意味着,它存储了10种要更改的颜色和10种要将其更改为的颜色。我通过一个常量缓冲区将其传递给Pixel Shader,但它没有按计划工作,因为只有数组的最后一个条目被识别,其他所有条目都是零。我想这是因为在将数据发送到GPU之前的16位对齐?还有什么其他方法可以将这样的数据发送到像素着色器?感谢您通读这篇文章!
您可以将交换作为纹理本身发送,可能最上面一行的纹素是您想要替换的,[x][y+1]是您想要将其更改为的颜色。GLSL可以让你用sampler2D来传递纹理。我想这与HLSL类似(尽管我写HLSL已经几个月了。:()
然后,您可以在着色器期间对顶行中的每个纹素进行采样/比较。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 从精灵表在 sfml 中为精灵制作动画
- AABB 碰撞使实际精灵的大小翻倍
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 我的精灵使用名为 ASGE 的C++框架卡在屏幕边缘
- C++GDI+ 选择调色板
- 如何为精灵编写复制构造函数
- 绘制精灵会导致分割错误
- 精灵动画查看器应该使用哪些Qt小部件
- Eclipse构建但不会启动精灵
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 打开 gl 精灵类不起作用
- 有没有办法在链接时设置精灵需要字段?
- 精灵没有动画
- 在不同位置渲染相同精灵的数组
- 如何在 SFML 上添加更多精灵?
- 精灵不显示我希望它们显示的方式
- 为什么精灵在 cocos2d-x 中颤抖
- 我没有看到精灵的动画
- 像素着色器中的精灵调色板交换