создание экземпляра colorMap:
GLfloat colormapColors[16];
вот мои данные цветовой карты:
colormapColors[0] = 0.0f; // black
colormapColors[1] = 0.0f;
colormapColors[2] = 0.0f;
colormapColors[3] = 0.0f;
colormapColors[4] = 0.0f; // blue
colormapColors[5] = 0.0f;
colormapColors[6] = 1.0f;
colormapColors[7] = 0.0f;
colormapColors[8] = 1.0f; // red
colormapColors[9] = 0.0f;
colormapColors[10] = 0.0f;
colormapColors[11] = 0.0f;
colormapColors[12] = 1.0f; // white
colormapColors[13] = 1.0f;
colormapColors[14] = 1.0f;
colormapColors[15] = 1.0f;
в моем цикле рендеринга у меня есть
glGenTextures(1, &texture); // get texture id
glBindTexture(GL_TEXTURE_1D, texture);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 4, 0, GL_RGBA, GL_FLOAT, colormapColors);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // linear interpolation when too small
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // linear interpolation when too bi
glErrorCheck;
фрагментный шейдер:
vec4 color = texture(ourTexture, clamp(alpha,0.0,1.0));
gl_FragColor = vec4(color.r, color.g, color.b, 1.0);
альфа рассчитывается по расстоянию до центра, и я получаю:
Итак, ясно, что у нас есть черный, синий, красный, белый. Не должно быть серого. Я думаю, что это проблема выравнивания данных. Я неправильно делаю glTexImage1D?