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() を 1 回だけ呼び出すと、一部のリソースのロードがまだ進行中です。

于 2013-06-15T06:20:43.847 に答える