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在HSV颜色空间而不是RGB中渲染点_Opengl_Colors_Shader_Rgb_Hsv - Fatal编程技术网

使用OpenGL在HSV颜色空间而不是RGB中渲染点

使用OpenGL在HSV颜色空间而不是RGB中渲染点,opengl,colors,shader,rgb,hsv,Opengl,Colors,Shader,Rgb,Hsv,我目前正在尝试使用HSV颜色空间渲染我的点。为此,我在片段着色器中使用一个函数,生成正确的转换向量。 现在我的问题是如何告诉OpenGL它应该将这个向量解释为HSV颜色而不是RGB颜色 我的片段着色器如下所示: const GLchar *fragment_shader2 = "#version 330\n" "" "/* Output Variables */" "out vec4 out_color;" "" "/* Function Prototypes */" "vec3

我目前正在尝试使用HSV颜色空间渲染我的点。为此,我在片段着色器中使用一个函数,生成正确的转换向量。 现在我的问题是如何告诉OpenGL它应该将这个向量解释为HSV颜色而不是RGB颜色

我的片段着色器如下所示:

 const GLchar *fragment_shader2 =
 "#version 330\n"
 ""
 "/* Output Variables */"
 "out vec4 out_color;"
 ""
 "/* Function Prototypes */"
 "vec3 convertRGBtoHSV(vec3 rgbColorVector);"
 ""
 "void main()"
 "{"
 "  vec3 rgbColor = vec3(1.0, 0.0, 0.55);"
 "  "
 "  out_color = vec4(convertRGBtoHSV(rgbColor), 1.0);"
 "}"
 ""
 "vec3 convertRGBtoHSV(vec3 rgbColorVector)"
 "{"
 "  vec3 hsvColorVector = vec3(0.0, 0.0, 0.0);"
 "  float maxValue = max(rgbColorVector.r, max(rgbColorVector.g, rgbColorVector.b));"
 "  float minValue = min(rgbColorVector.r, min(rgbColorVector.g, rgbColorVector.b));"
 "  "
 "  /* Set Value */"
 "  hsvColorVector[2] = maxValue;"
 "  "
 "  /* Set Saturation */"
 "  if(maxValue != 0.0)"
 "  {"
 "      hsvColorVector[1] = (maxValue - minValue) / maxValue;"
 "  }"
 "  "
 "  /* Set Hue */"
 "  float hue = 0.0;"
 "  if(maxValue == rgbColorVector.r)"
 "  {"
 "      hue = (0.0 + (rgbColorVector.g - rgbColorVector.b) / (maxValue - minValue)) * 60.0;"
 "  }"
 "  else if(maxValue == rgbColorVector.g)"
 "  {"
 "      hue = (2.0 + (rgbColorVector.b - rgbColorVector.r) / (maxValue - minValue)) * 60.0;"
 "  }"
 "  else if(maxValue == rgbColorVector.b)"
 "  {"
 "      hue = (4.0 + (rgbColorVector.r - rgbColorVector.g) / (maxValue - minValue)) * 60.0;"
 "  }"
 "  "
 "  if(hue < 0.0)"
 "  {"
 "      hue = hue + 360.0;"
 "  }"
 "  "
 "  hsvColorVector[0] = hue / 360.0;"
 "  "
 "  /* Return converted color vector */"
 "  return hsvColorVector;"
 "}"
 "\0";
const GLchar*fragment_shader2=
“#版本330\n”
""
“/*输出变量*/”
“输出向量4输出颜色;”
""
“/*函数原型*/”
“vec3转换器RGBtoHSV(vec3 rgbColorVector);”
""
“void main()”
"{"
vec3 rgbColor=vec3(1.0,0.0,0.55)
"  "
out_color=vec4(转换RGBTOHSV(rgbColor),1.0)
"}"
""
“vec3转换器RGBtoHSV(vec3 rgbColorVector)”
"{"
vec3 hsvColorVector=vec3(0.0,0.0,0.0)
float maxValue=max(rgbColorVector.r,max(rgbColorVector.g,rgbColorVector.b))
float minValue=min(rgbColorVector.r,min(rgbColorVector.g,rgbColorVector.b))
"  "
“/*设置值*/”
“hsvColorVector[2]=最大值;”
"  "
“/*设置饱和度*/”
“如果(最大值!=0.0)”
"  {"
“hsvColorVector[1]=(maxValue-minValue)/maxValue;”
"  }"
"  "
“/*设置色调*/”
“浮动色调=0.0;”
“如果(maxValue==rgbColorVector.r)”
"  {"
“色调=(0.0+(rgbColorVector.g-rgbColorVector.b)/(maxValue-minValue))*60.0;”
"  }"
“else if(maxValue==rgbColorVector.g)”
"  {"
“色调=(2.0+(rgbColorVector.b-rgbColorVector.r)/(maxValue-minValue))*60.0;”
"  }"
“else if(maxValue==rgbColorVector.b)”
"  {"
“色调=(4.0+(rgbColorVector.r-rgbColorVector.g)/(maxValue-minValue))*60.0;”
"  }"
"  "
“如果(色调<0.0)”
"  {"
“色调=色调+360.0;”
"  }"
"  "
“hsvColorVector[0]=色调/360.0;”
"  "
“/*返回转换后的颜色向量*/”
“返回hsvColorVector;”
"}"
"\0";

在本例中,输出为vec3(0.908、1.0、1.0),显示为白色而不是粉色。

OpenGL无法使用HSV颜色空间显示颜色。 您只能使用RGBA格式(或一些变体,如SRGBA)


但是在内部使用HSV颜色空间并最终生成RGBA值不是问题

OpenGL无法使用HSV颜色空间显示颜色。 您只能使用RGBA格式(或一些变体,如SRGBA)


但在内部使用HSV颜色空间并最终生成RGBA值不是问题

事实上,您应该编写HSVtoRGB Converrions函数。您将把HSV颜色传递给此函数。它将HSV颜色转换为RGB颜色,然后以RGB打印。
换句话说,您将在HSV颜色空间内部工作,并且只有在绘图时,才转换为RGB。

事实上,您应该编写HSVtoRGB converions函数。您将把HSV颜色传递给此函数。它将HSV颜色转换为RGB颜色,然后以RGB打印。 换句话说,您将在HSV颜色空间内部工作,并且仅在打印时转换为RGB