При смешивании двух текстур разного размера во фрагментном шейдере можно ли сопоставить текстуры с разными координатами?
Например, при смешивании текстур из следующих двух изображений:
со следующими шейдерами:
// Vertex shader
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
void main() {
gl_Position = uMVPMatrix * vPosition;
vTexcoord = aTexcoord;
}
// Fragment shader
uniform sampler2D uContTexSampler;
uniform sampler2D uMaskTextSampler;
varying vec2 vTexcoord;
void main() {
vec4 mask = texture2D(uMaskTextSampler, vTexcoord);
vec4 text = texture2D(uContTexSampler, vTexcoord);
gl_FragColor = vec4(text.r * mask.r), text.g * mask.r, text.b * mask.r, text.a * mask.r);
}
(Фрагментный шейдер заменяет пробелы черно-белой маски второй текстурой).
Поскольку обе текстуры используют одни и те же gl_Position и координаты (1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f), обе текстуры сопоставляются с одними и теми же координатами в представлении:
Однако моя цель — сохранить исходное соотношение текстур:
Я хочу добиться этого в шейдере, а не в glBlendFunc
и glBlendFuncSeparate
, чтобы мои собственные значения для смешивания.
Есть ли способ добиться этого в GLSL? У меня такое ощущение, что мой подход к смешиванию вершин текстуры для разных координат положения нарушен дизайном...