gle*_*rey 6 c++ math colors objective-c cocos2d-iphone
我正在使用cocos2d库制作iOS游戏.
假设您有两个具有两种不同颜色的对象 - 以RGB格式定义
Blue: 0,0,255
Yellow: 255,255,0
Run Code Online (Sandbox Code Playgroud)
我想添加蓝色和黄色来制作绿色.
为了使事情复杂化,让我们说Blue对象比Yellow对象更大(为了说明,我们说比例为2:1),我加入的蓝色是黄色的两倍 - 我如何计算这个新的(浅绿色)颜色正确.
我理解LAB*Color Space对于这种"自然色"的东西很有用,但我不知道如何使用它 - 特别是在cocos2d对象的上下文中,(AFAIK)仅限于在其中使用RGB配色方案.
我真的很感激如何实现这一点的实际帮助.谢谢堆!
21/4更新:所以在LAB*中蓝色+黄色≠绿色(当你看到它们位于同一个通道的两端时才有意义).它实际上是一个相当棘手的问题,一个小 一点的讨论SO.似乎最终的答案是使用Kubelka-Munk方法,即一种名为Krita的开源软件.我找不到任何地方(公式或代码本身).
这个问题有一个链接,它使用HSL以类似的方法绘制.我将尝试查看它是否有效,我将在此处反馈结果.
与此同时,如果有人知道如何实现Kubelka-Munk或者我可以找到代码来执行此操作,或者其他解决方案,我会非常非常激动!
没有颜色模型混合蓝色和黄色使绿色.用水粉自己尝试一下,它唯一的工作方式是青色和黄色.这就是为什么你应该尝试从RGB切换到CMYK,如果需要,可以返回.这是如何完成的
void toCMYK(float red, float green, float blue, float* cmyk)
{
float k = MIN(255-red,MIN(255-green,255-blue));
float c = 255*(255-red-k)/(255-k);
float m = 255*(255-green-k)/(255-k);
float y = 255*(255-blue-k)/(255-k);
cmyk[0] = c;
cmyk[1] = m;
cmyk[2] = y;
cmyk[3] = k;
}
void toRGB(float c, float m, float y, float k, float *rgb)
{
rgb[0] = -((c * (255-k)) / 255 + k - 255);
rgb[1] = -((m * (255-k)) / 255 + k - 255);
rgb[2] = -((y * (255-k)) / 255 + k - 255);
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,混合青色和黄色
float cmyk1[4];
toCMYK(255, 255, 0, cmyk1); // yellow
float cmyk2[4];
toCMYK(0, 255, 255, cmyk2); // cyan
// Mixing colors is as simple as adding
float cmykMix[] = { cmyk1[0] + cmyk2[0], cmyk1[1] + cmyk2[1], cmyk1[2] + cmyk2[2], cmyk1[3] + cmyk2[3] };
float rgb[3];
toRGB(cmykMix[0], cmykMix[1], cmykMix[2], cmykMix[3], rgb);
NSLog(@"RGB mix = (%f, %f, %f)", rgb[0], rgb[1], rgb[2]);
Run Code Online (Sandbox Code Playgroud)
运行代码将产生: RGB mix = (0.000000, 255.000000, 0.000000)
检查这个网站上的公式:http://www.easyrgb.com/index.php?X =MATH 我一直在做类似的事情,它可以通过转换 RGB->XYZ->Lab 来实现。然而,计算是相当昂贵的(如果你对很多像素进行计算)。
如果您想获得与人眼相似的结果,请在尝试混合颜色时忘记 RGB 数学
| 归档时间: |
|
| 查看次数: |
6404 次 |
| 最近记录: |