如何用纹理绘制背景webgl

时间:2013-06-15 05:23:04

标签: web-applications webgl

我是webgl的新手,我遇到了这个奇怪的问题。

我尝试加载纹理并将其绘制为画布的背景。 我只需要画一次背景。 所以逻辑上我只需要调用我的函数drawBackground()一次 这是完整代码问题的片段,您可以在此处查看源代码 http://www.csupomona.edu/~lannguyen/WebGl%20Project/bg.html

function webGLStart() {
            var canvas = document.getElementById("lesson05-canvas");
            initGL(canvas);
            initShaders();
            initBuffers();
            initTexture();

            gl.clearColor(0.0, 0.0, 0.0, 1.0);
            gl.enable(gl.DEPTH_TEST);
            drawBackground();
        } 

当我执行上面的代码时,它不起作用。我的画布只是变黑了。假设我的drawBackground函数工作正常。

function tick() {
        requestAnimFrame(tick);
        drawBackground();
    }


    function webGLStart() {
        var canvas = document.getElementById("lesson05-canvas");
        initGL(canvas);
        initShaders();
        initBuffers();
        initTexture();

        gl.clearColor(0.0, 0.0, 0.0, 1.0);
        gl.enable(gl.DEPTH_TEST);
        tick();
    }

当我这样做时,它有效,我不知道为什么我必须调用tick和requestAnimateFrame(tick),这看起来像是递归给我。 但是,如果我只想画一次,我不明白为什么我需要不断画它。

任何帮助或解释都会很棒。

由于

1 个答案:

答案 0 :(得分:1)

我怀疑你做了一些异步调用来获取其中一些资源:

initShaders();
initBuffers();
initTexture();

然后当你只调用一次drawBackground()时,一些资源的加载仍在进行中。