2

WebGL を使用して大きなシーン (モデル化された都市) をレンダリングしたいのですが、オクルージョン カリングはパフォーマンスを最適化する良い方法だと思います。

また、WebGL 2.0 には、オクルージョン情報を取得するための「Query Objects」という新しい機能があることも知っています。しかし、gl.getQueryParameter(query, gl.QUERY_RESULT)を使用するたびに、同じ結果1が得られました。

そして、問題を説明するためにここにデモを書きました:

    var query = gl.createQuery();
    gl.beginQuery(gl.ANY_SAMPLES_PASSED, query);
    gl.drawArrays(gl.TRIANGLES,0,n);
    gl.endQuery(gl.ANY_SAMPLES_PASSED);

    var tick = function(){
        if(!gl.getQueryParameter(query,gl.QUERY_RESULT_AVAILABLE)){
            requestAnimationFrame(tick);
            return;
        }
        var result = gl.getQueryParameter(query,gl.QUERY_RESULT);
        console.log(Number(result));
        gl.deleteQuery(query);
    };

    tick();

これは、2番目の三角形が最初の三角形によって隠されているという私の頂点情報です。

    var vertexData = new Float32Array([
            0.0,0.5,0.0,        //first triangle
            -0.5,-0.5,0.0,
            0.5,-0.5,0.0,

            0.0,0.5,-0.5,       //second triangle
            -0.5,-0.5,-0.5,
            0.5,-0.5,-0.5
    ]);

結果は常に 1 です。

「1」が表す結果は何ですか?

さらに、WebGL 2.0 を使用してオクルージョン カリングを行うにはどうすればよいですか? 役に立つサンプルはありますか?

4

3 に答える 3