【发布时间】:2017-02-26 04:24:01
【问题描述】:
我想用 WebGL 渲染一个大场景(一个建模的城市),我认为 occlusion culling 是优化性能的好方法。
而且我知道 WebGL 2.0 有一个名为“查询对象”的新功能来获取遮挡信息。但是每次我使用 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();
这是我的顶点信息,第二个三角形被第一个三角形遮挡。
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 进行遮挡剔除?有什么有用的示例吗?
【问题讨论】:
-
所以你有 一个 绘制调用绘制 两个 三角形,其中一个被另一个覆盖,并要求
ANY_SAMPLES_PASSED给你@987654321 @ 因为你所有的第一个三角形样本都通过了,很容易满足“任何样本”。