В настоящее время я пытаюсь реализовать фрагментный шейдер, который смешивает цвета разных частиц жидкости, комбинируя процентное содержание фаз жидкости внутри частицы.Так, например, если жидкость 1 обладает 15% частицы, а жидкость 2 имеет 85%, результирующий цвет должен отражать эту пропорцию.Поэтому у меня есть буферная текстура, содержащая процент, отраженный как значение с плавающей точкой в [0,1] на частицу и на фазу, и текстура, содержащая текучие цвета.
Текстура буфера в настоящее время содержит проценты для каждой частицы в последующем списке.Вот например:
|Частица 1 процент 1 |Частица 1 процент 2 |Частица 2 процент 1 |Частица 2 процент 2 |...
Я уже проверил правильность текстур, назначив их частицам напрямую или назначив volFrac красной части конечного цвета.Я также пробовал разные отладчики GLSL, пытаясь проанализировать проблему, но ни одна из популярных опций не работала на моей машине после попытки.
#version 330
uniform float radius;
uniform mat4 projection_matrix;
uniform uint nFluids;
uniform sampler1D colorSampler;
uniform samplerBuffer volumeFractionSampler;
in block
{
flat vec3 mv_pos;
flat float pIndex;
}
In;
out vec4 out_color;
void main(void)
{
vec3 fluidColor = vec3(0.0, 0.0, 0.0);
for (int fluidModelIndex = 0; fluidModelIndex < int(nFluids); fluidModelIndex++)
{
float volFrac = texelFetch(volumeFractionSampler, int(nFluids * In.pIndex) + fluidModelIndex).x;
vec3 phaseColor = texture(colorSampler, float(fluidModelIndex)/(int(nFluids) - 1)).xyz;
fluidColor = volFrac * phaseColor;
}
out_color = vec4(fluidColor, 1.0);
}
А также короткий фрагмент инициализации текстуры
//Texture Initialisation and Manipulation here
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, m_textureMap);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, nFluids, 0, GL_RGB, GL_FLOAT, color_map);
//Creation and Initialisation for Buffer Texture containing the volume Fractions
glBindBuffer(GL_TEXTURE_BUFFER, m_texBuffer);
glBufferData(GL_TEXTURE_BUFFER, nFluids * nParticles * sizeof(float), m_volumeFractions.data(), GL_STATIC_DRAW);
glBindBuffer(GL_TEXTURE_BUFFER, 0);
glBindTexture(GL_TEXTURE_BUFFER, m_bufferTexture);
glTexBuffer(GL_TEXTURE_BUFFER, GL_R32F, m_texBuffer);
Проблема в том, что если я умножу информацию о текстуре буфера на информацию о текстуре, частицы, которые должны быть визуализированы, исчезнут полностью без каких-либо предупреждений или других сообщений об ошибках.Таким образом, частицы исчезают, если я использую утверждение:
fluidColor = volFrac * phaseColor;
Кто-нибудь знает, почему это так или как я могу отладить эту проблему дальше?