1

我是 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),这对我来说就像递归。但如果我只想画一次,我不明白为什么我需要不断地画它。

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

谢谢

4

1 回答 1

1

我怀疑您在其中一些中进行了一些异步调用以获取资源:

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

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

于 2013-06-15T06:20:43.847 回答