javascript - WebGL设置不同的纹理

标签 javascript textures webgl

我正在 WebGL 中的一个现有项目上工作,纹理有问题,我在将正确的纹理设置到正确的对象时遇到一些问题,在 khronos.org 论坛上我有一些屏幕截图和代码会发生什么。

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

目前我正在创建一个小盒子,只是为了了解一切是如何工作的,但它从其墙壁和地板上获取纹理。

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

提前谢谢您。

这是“handleloadedtexture”

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);

我的着色器: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);"

但是可能还有其他东西......

关于javascript - WebGL设置不同的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634327/

相关文章:

javascript - 如何将动态表单附加到表格末尾?

c++ - 纹理绑定(bind)的特殊参数?

OpenGL 非正方形纹理

shader - 使用纹理图集时发生 HLSL 颜色渗色

javascript - webGL 纹理未显示在矩形中

javascript - 如何在网页中同时传播数百个具有动画和交互式 webgl 上下文的小 Canvas ?

javascript - 为什么轮询在闲置一段时间后停止工作?

javascript - Firefox 30 数组处理中的 JavaScript 错误

javascript - 在 Chrome 扩展中使用 javascript 事件

ios - gl-react-native 不在物理 iOS 设备上显示图像