Реализация GL_REPEAT на шейдере - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь реализовать GL_REPEAT на glsl. Я написал что-то, используя функцию мода, но есть проблема , где две текстуры объединяются. Не могли бы вы объяснить, почему это не работает правильно?

в основном:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
мой код шейдера выглядит так:
in vec2 TextureCoord;

float yCoord = mod(TextureCoord.y + 0.5, 1.0);
emission = texture(material.emission,vec2(TextureCoord.x, yCoord)).rgb;

//result
vec3 result = emission;
FragColor = vec4(result, 1.0f);

1 Ответ

1 голос
/ 15 февраля 2020

Режим обтекания учитывается при фильтрации текстур . Вы устанавливаете режим фильтра GL_LINEAR, следовательно, он всегда будет использовать 2x2 texel footprint. Если этот след находится на границе, выбранный режим обтекания будет применяться к выбору каждого отдельного текста . В вашем случае, если вы приблизитесь к границе, вы попросите его фильтровать по цвету границы textrue, чего бы никогда не сделал фильтр с режимом обтекания GL_REPEAT, вместо этого он использовал бы данные texel с противоположной границы.

То есть если вы хотите повторно реализовать это вручную в шейдере, вы также должны реализовать выбор текселей и саму фильтрацию . Поскольку вы также используете mipmapping, это будет довольно сложным и медленным.

...