В настоящее время я пытаюсь отобразить свои точки с помощью цветового пространства 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";
В этом примере выводом является vec3(0,908, 1,0, 1,0), который отображается белым, а не розовым цветом.