簡體   English   中英

WebGL設置不同的紋理

[英]WebGL setting different textures

我正在WebGL中的現有項目上工作,紋理存在問題,在khronos.org論壇上設置正確的紋理到正確的對象時遇到了一些麻煩,我有一些截圖和代碼。

http://www.khronos.org/message_boards/viewtopic.php?f=43&t=5203

目前,我正在創建一個小盒子,目的是學習一切工作原理,但是它可以從牆壁和地板上獲得紋理。

http://tinypic.com/r/23mr1j8/6

先感謝您。

這是“處理后的紋理”

function handleLoadedTexture(texture, image) {
    gl.bindTexture(gl.TEXTURE_2D, texture);
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE,
            texture.image);

    if (isPowerOfTwo(texture.image.width) && isPowerOfTwo(texture.image.height)) {
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
    } else {
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    }



    gl.bindTexture(gl.TEXTURE_2D, null);

    texturesToLoad--;
}

所有紋理都已加載,如果我在此部分進行了更改,則可以在它們之間切換:

  gl.activeTexture(gl.TEXTURE0);
  gl.bindTexture(gl.TEXTURE_2D, texture0);
  gl.uniform1i(shaderProgram.texture0Uniform, 0);


  gl.activeTexture(gl.TEXTURE0 + 1);
  gl.bindTexture(gl.TEXTURE_2D, texture1);
  gl.uniform1i(shaderProgram.texture1Uniform, 1);

  gl.activeTexture(gl.TEXTURE0 + 2);
  gl.bindTexture(gl.TEXTURE_2D, texture2);
  gl.uniform1i(shaderProgram.texture2Uniform, 2);

  gl.activeTexture(gl.TEXTURE0 + 3);
  gl.bindTexture(gl.TEXTURE_2D, texture3);
  gl.uniform1i(shaderProgram.texture3Uniform, 3);

我的shader:fs看起來像這樣:

 <script id="shader-fs" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif

varying vec2 vTextureCoord;
varying float vTextureID;
varying vec4 vColor;

uniform sampler2D uTexture0;
uniform sampler2D uTexture1;
uniform sampler2D uTexture2;

void main(void) {
    vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
    if (vTextureID < 0.1)
        gl_FragColor = texture2D(uTexture0, vTextureCoord.st);
    else if (vTextureID < 1.1)
        gl_FragColor = texture2D(uTexture1, vTextureCoord.st);
    else if (vTextureID < 2.1)
        gl_FragColor = texture2D(uTexture2, vTextureCoord.st);
    else if (vTextureID < 3.1)
        gl_FragColor = texture2D(uTexture3, vTextureCoord.st); 

您能看到問題嗎?

uniform sampler2D uTexture0;
uniform sampler2D uTexture1;
uniform sampler2D uTexture2;

再增加一行:

“統一的sampler2d uTexture3;”

為聲明

"gl_FragColor = texture2D(uTexture3, vTextureCoord.st);"

但是可能還有別的東西...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM