2010-12-18 62 views
4

我正在學習在WebGL上使用多紋理。我有以下着色器的代碼片段:WebGL上的多紋理GL_TEXTURE1問題

uniform int flag; 

uniform sampler2D texture0; 
uniform sampler2D texture1; 

varying vec2 v_texCoord; 

void main() 
{ 
    vec2 texCoord = vec2(v_texCoord.s, 1.0 - v_texCoord.t); 

    vec4 texel0 = texture2D(texture0, texCoord); 
    vec4 texel1 = texture2D(texture1, texCoord); 

    if (1 == flag) 
    { 
     gl_FragColor = texel1; 

    } else 
    { 
     gl_FragColor = texel0; 
    } 
} 

而且,我的JavaScript代碼片段:

gl.uniform1i(gl.getUniformLocation(gl.program, "flag"), 1); 
gl.uniform1i(gl.getUniformLocation(gl.program, "texture0"), 0);  // Texture Unit 0 
gl.uniform1i(gl.getUniformLocation(gl.program, "texture1"), 1);  // Texture Unit 1 
// Activate 2 textures 
gl.enable(gl.TEXTURE_2D); 

gl.activeTexture(gl.GL_TEXTURE0);  
gl.bindTexture(gl.TEXTURE_2D, photoTexture0); 

gl.activeTexture(gl.GL_TEXTURE1);  
gl.bindTexture(gl.TEXTURE_2D, photoTexture1); 

的photoTexture1(texture1)只在屏幕上顯示黑色。我可以正確顯示photoTexture0(texture0)。看起來photoTexture1(texture1)在着色器中不可見。

由於上面的代碼不起作用,我對此很感興趣,所以想知道我是否做錯了什麼,或者我誤解了multitexture的工作原理。

任何幫助表示讚賞。在此先感謝您的幫助。

注:跨崗位上http://www.khronos.org/message_boards/viewtopic.php?f=43&t=3357&p=8858#p8858

回答

5

我發現並修復我的C語言編寫的一個例子cut'n'paste的GL_TEXTURE0問題

gl.activeTexture(gl.TEXTURE0); // remove the "GL_" on GL_TEXTURE0 
gl.bindTexture(gl.TEXTURE_2D, photoTexture0); 

gl.uniform1i(gl.getUniformLocation(gl.program, "texture1"), 0); 
gl.activeTexture(gl.TEXTURE1);  // remove the "GL_" on GL_TEXTURE1 

+0

WebGL不在TEXTURE0,TEXTURE1等上使用前綴「GL_」。請參閱https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/上的WebGL規範支持WebGL spec.html – pion 2010-12-18 13:56:32