我正在开发一款适用于iPhone的OpenGL ES简单2D游戏。我的问题是我想使用不同的色调渲染纹理。基本上我想改变我渲染的纹理中的颜色的色调。简单地改变glColor是行不通的,因为它也会影响图像中没有颜色的部分。有什么想法吗?
答案 0 :(得分:5)
感谢您的澄清,这远非我最初的理解。请注意,您提供给OpenGL ES的纹理已经具有色调,因此您要求的是更改现有色调。
首先,让我回答所说的问题:
让我们从对纹素的需求开始。由于OpenGL纹理存储为RGB,要转换纹素的色调,您需要转换RGB-> HSL->应用新的hue-> RGB。 您可以找到实际的数学运算来进行RGB-> HSL和反向转换here。你想如何选择新的色调,我想你必须填写它。
最大的问题是何时转换发生。好吧,OpenGL管道不会让你在读取纹理时进行复杂的转换(不是在ES 1.1中,-ES 2.0 fragment shaders
会有所帮助,但代价很高)。因此,您必须在GL ES纹理管道之外进行所有转换。根据您需要更改色调的频率,我的建议是离线(并存储各种主题纹理),或者在将它们加载到OpenGL ES之前根据需要为新色调计算新纹理。
据我所知,GL ES 1.1没有任何内置设施可以直接帮助实现这一目的。
现在,退一步,我不确定是什么阻止你在2个纹理中分离,如果你可以在运行时使用2个纹理。我指出的数学确实将饱和度与亮度分开,无论纹理是如何生成的(理论上,如果我理解你的情况,色调应该是不变的)。离线计算在任何输入纹理上应该相当容易吗?