Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL处理浮动颜色饱和度(“颜色溢出”)?_Opengl_Transparency_Blending_Color Blending_Saturation Arithmetic - Fatal编程技术网

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,

我正在使用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,0.5)(即较浅的红色,其发光度为“纯”红色的两倍)


使用OpenGL是否有办法实现这一点(或类似的功能?

如果目标缓冲区的图像格式具有规范化格式(例如,无符号字节),则片段着色器的输出将被钳制为[0,1]。如果使用浮点格式,则输出不会被钳制。见和

通过混合不支持的函数混合目标缓冲区和颜色是很棘手的。一个可能的解决方案是使用着色器程序并使用扩展

此外,扩展添加了许多“高级”混合方程,如
HSL\u色调KHR
HSL\u饱和度KHR
HSL\u颜色KHR
HSL\u亮度KHR