OpenGL处理浮动颜色饱和度(“颜色溢出”)?
我正在使用openGL进行科学可视化,我试图基本上创建一个“彩色雾”来演示多维场。我希望颜色的色调代表场的方向,颜色的亮度对应于场的强度 我使用OpenGL处理浮动颜色饱和度(“颜色溢出”)?,opengl,transparency,blending,color-blending,saturation-arithmetic,Opengl,Transparency,Blending,Color Blending,Saturation Arithmetic,我正在使用openGL进行科学可视化,我试图基本上创建一个“彩色雾”来演示多维场。我希望颜色的色调代表场的方向,颜色的亮度对应于场的强度 我使用GL\u-BLEND和glBlendFunc(GL\u-ONE,GL\u-ONE)来实现我创建的曲面颜色的添加混合。问题是:在某些地方,颜色会饱和。例如: (1,0,0)+(1,0,0)=(2,0,0),渲染后它将变成(1,0,0)(即“溢出”刚刚被切断)。这不是我想要的处理方式。我想通过保持色调和亮度来处理溢出,即 (2,0,0)应转换为(1,0.5,
GL\u-BLEND
和glBlendFunc(GL\u-ONE,GL\u-ONE)
来实现我创建的曲面颜色的添加混合。问题是:在某些地方,颜色会饱和。例如:(1,0,0)+(1,0,0)=(2,0,0),渲染后它将变成(1,0,0)(即“溢出”刚刚被切断)。这不是我想要的处理方式。我想通过保持色调和亮度来处理溢出,即 (2,0,0)应转换为(1,0.5,0.5)(即较浅的红色,其发光度为“纯”红色的两倍)
使用OpenGL是否有办法实现这一点(或类似的功能?如果目标缓冲区的图像格式具有规范化格式(例如,无符号字节),则片段着色器的输出将被钳制为[0,1]。如果使用浮点格式,则输出不会被钳制。见和 通过混合不支持的函数混合目标缓冲区和颜色是很棘手的。一个可能的解决方案是使用着色器程序并使用扩展 此外,扩展添加了许多“高级”混合方程,如
HSL\u色调KHR
、HSL\u饱和度KHR
、HSL\u颜色KHR
和HSL\u亮度KHR