HLSL像素着色器 - 更改特定色调的图像颜色

Mar*_*yer 4 shader hlsl

我想写一个带有输入图像的像素着色器,并将一个Hue范围(即HSV)的所有颜色转换为另一个Hue范围.

我的动机很简单:我想以不同的方式为一堆不同的纹理着色,但我不想为整个纹理着色,只是在特定范围内具有色调的部分.这样,我可以绘制一辆赛车的图像,然后使用像素着色器更改汽车上的条纹和徽标的颜色.

我在网上查看了HLSL文档,找不到任何处理色调的内容.是否有在线提供的HLSL代码库?

这是我想要完成的一些伪代码:

external float SrcMinHue,SrcMaxHue,TargetMin
void changeHues(image source)
{
   foreach x,y in image:
   {
      float sourceHue = getHue(source,x,y)
      if (SrcMinHue < sourceHue < SrcNaxHue):
          setHue(source,x,y,(TargetMin + (sourceHue - MinHue))
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用XNA Game Studio,如果这些信息对任何人都很重要.

Tch*_*ami 6

在NVidia Shader Library页面上查看"post RGB to HSV"样本.这可能会给你一些灵感.

否则,我猜你可以"简单地"使用维基百科中的公式将RGB颜色转换为像素着色器中 HSV ,然后从那里获取它.