可以說我們紋理四(兩個三角形)。我認爲這個問題是什麼類同質地潑灑像下面的例子GLSL混合基底紋理與貼花紋理在需要的地方
precision lowp float;
uniform sampler2D Terrain;
uniform sampler2D Grass;
uniform sampler2D Stone;
uniform sampler2D Rock;
varying vec2 tex_coord;
void main(void)
{
vec4 terrain = texture2D(Terrain, tex_coord);
vec4 tex0 = texture2D(Grass, tex_coord * 4.0); // Tile
vec4 tex1 = texture2D(Rock, tex_coord * 4.0); // Tile
vec4 tex2 = texture2D(Stone, tex_coord * 4.0); // Tile
tex0 *= terrain.r; // Red channel - puts grass
tex1 = mix(tex0, tex1, terrain.g); // Green channel - puts rock and mix with grass
vec4 outColor = mix(tex1, tex2, terrain.b); // Blue channel - puts stone and mix with others
gl_FragColor = outColor; //final color
}
,但我想只要將在需要的地方基礎四紋理貼圖1。
算法是一樣的,但我認爲我們不需要額外的紋理和1個填充圖層來保存貼圖的位置(例如紅色層!= 0),我們必須生成自己的「terrain.r」(這是浮動嗎?)變量並混合基礎紋理和貼花紋理。
precision lowp float;
uniform sampler2D base;
uniform sampler2D decal;
uniform vec2 decal_location; //where we want place decal (e.g. 0.5, 0.5 is center of quad)
varying vec2 base_tex_coord;
varying vec2 decal_tex_coord;
void main(void)
{
vec4 v_base = texture2D(base, base_tex_coord);
vec4 v_decal = texture2D(Grass, decal_tex_coord);
float decal_layer = /*somehow get our decal_layer based on decal_position*/
gl_FragColor = mix(v_base, v_decal, decal_layer);
}
如何實現這樣的事情?
或者我可能只是在opengl一側生成splat紋理並將其傳遞給第一個着色器?這會給我爲什麼要在四4個不同的貼花,但會經常更新慢(如機槍打牆)
你的也不錯,只比66多30.8k,新手需要幫助新手。 – Aristarhys 2012-04-03 19:04:22