Jump to content
  • Advertisement
Sign in to follow this  
xnewagex

GLSL texture splatting with several textures and just one texture coordinate system.

This topic is 3341 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm working in a terrain renderer/editor for a game. Well I'm using shaders and I have several textures (2 RGBA textures with the masks + 8 ground textures) to blend in a chunk. But I just need a texture coordinate system because all the textures will have te same size without <<offsets?>> (Well, English isn't my native language, sorry).
// We can blend 6 ground textures uniform int NumTextures; // We have 2 textures, with 4 masks (RGBA) eachone uniform sampler2D Mask1; uniform sampler2D Mask2; // There are to textures for the traks, one of sand and another one of stone uniform sampler2D Path1; uniform sampler2D Path2; // We have to link the textures with the shadders before uniform sampler2D Ground1; uniform sampler2D Ground2; uniform sampler2D Ground3; uniform sampler2D Ground4; uniform sampler2D Ground5; uniform sampler2D Ground6; // Get the masks vec4 mask1 = texture2D(Mask1, gl_TexCoord[0].xy); vec4 mask2 = texture2D(Mask2, gl_TexCoord[0].xy); // Get the path textures vec4 path1 = texture2D(Path1, gl_TexCoord[0].xy); vec4 path2 = texture2D(Path2, gl_TexCoord[0].xy); // Get the ground textures vec4 ground1 = texture2D(Ground1, gl_TexCoord[0].xy); vec4 ground2 = texture2D(Ground2, gl_TexCoord[0].xy); vec4 ground3 = texture2D(Ground3, gl_TexCoord[0].xy); vec4 ground4 = texture2D(Ground4, gl_TexCoord[0].xy); vec4 ground5 = texture2D(Ground5, gl_TexCoord[0].xy); vec4 ground6 = texture2D(Ground6, gl_TexCoord[0].xy); void main() { // Sets the first ground vec4 out_color = ground1; // Iterate and blend textures with the paths for(int idx=1;idx<NumTextures;idx++) { if(idx==1) { out_color = out_color * mask1.r; out_color = mix(out_color, ground2, mask1.g); } else if(idx==2) out_color = mix(out_color, ground3, mask1.b); else if(idx==3) out_color = mix(out_color, ground4, mask1.a); else if(idx==4) out_color = mix(out_color, ground5, mask2.r); else if(idx==5) out_color = mix(out_color, ground6, mask2.g); } // Blend paths out_color = mix(out_color, path1, mask2.b); out_color = mix(out_color, path2, mask2.a); gl_FragColor = out_color; } [/QUOTE]

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!