如果在片段着色器中混合兩種不同大小的紋理,是否可以將紋理映射到不同的座標?在GLSL中混合不同大小/座標的紋理
例如,如果從下面的兩個圖像融合紋理:
具有以下着色器:
// 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內實現這一點?我有一種感覺,我的混合不同位置座標的紋理頂點的方法被設計破壞...
太棒了,謝謝!這讓我走上了正確的軌道 - 使用vec2變量進行縮放非常簡單,現在我正在管理掩碼的位置。 –
哦,是的,我忘了那個部分,現在你已經在左邊了......你需要將它標準化。讓我編輯。 –
試試這個編輯,我希望它是正確的......並且不要改變位置,那些應該與目標相同。另請注意,您可以在頂點着色器中進行縮放,並在片段着色器中爲掩碼添加另一個紋理座標。 –