gpt4 book ai didi

c++ - 像素着色器中的 Sprite 调色板交换

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:03 25 4
gpt4 key购买 nike

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

XMFLOAT3 palette[10][2];

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

float4 xPalette[10][2];

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

最佳答案

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

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

关于c++ - 像素着色器中的 Sprite 调色板交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com