polygonOffset 在 IE11 中不起作用?

polygonOffset does not work in IE11?

一个简单的 z-fighting 问题。

http://jsfiddle.net/jmchen/y03q54oa/

polygonOffset: true,
polygonOffsetFactor: 1.0,
polygonOffsetUnits: 4.0

代码在最新的 Chrome、FF,甚至 Edge 中运行良好,但在 IE11 中会生成工件。我的发现表明,在 IE11 中,函数 polygonOffset 改变了网格的 Z 位置,而不是深度缓冲值!有人可以证实我的怀疑吗?我应该报告 Microsoft 中的错误还是 THREEJS 库中的错误?

我通过以下方式在 IE11 中使用它:

var mesh0 = new THREE.Mesh(new THREE.BoxGeometry(50, 50, 50),
    new THREE.MeshBasicMaterial({
        color: 0x0000ff,
        polygonOffset: true,
        polygonOffsetFactor: 0,
        polygonOffsetUnits: 0
}));

这似乎只发生在两个形状都是网格时(线条工作正常)。虽然它没有多大意义(Windows 上的每个浏览器都通过 ANGLE 呈现,除非你强制它进入本机 GL 模式),这是一个 IE 问题。

我在 Edge 中测试了您的原始代码,它运行良好。微软几乎已经让 IE 进入休眠状态,只生产未来的安全更新。

WebGLState.setPolygonOffset 函数似乎有问题:

if ( polygonOffset ) {

        enable( gl.POLYGON_OFFSET_FILL );

        if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {

            gl.polygonOffset( factor, units );

            currentPolygonOffsetFactor = factor;
            currentPolygonOffsetUnits = units;

        }

    } else {

        disable( gl.POLYGON_OFFSET_FILL );

    }

如果有一个网格的 polygonOffset=true,库启用 gl.POLYGON_OFFSET_FILL。看来,在 IE11 中,为其他 material 禁用此功能(polygonOffset=false)无法正常工作。其余的网格使用相同的因子和单位 -> 伪影是可见的。如果您像示例中那样为其他网格设置 polygonOffset=true 和默认值 factor, units = {0,0) -> library sets new factor,units 一切都很好。我认为,可以更改函数 WebGLState.setPolygonOffset 以便为每个 material 设置因子和单位,而不仅仅是针对 polygonOffset=true,如果至少有一个网格的 polygonOffset=true.

问候 瓦尔德玛