polygonOffset在IE11中不起作用?

时间:2017-04-18 18:26:16

标签: three.js internet-explorer-11

一个简单的z-fighting问题。

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

polygonOffset: true,
polygonOffsetFactor: 1.0,
polygonOffsetUnits: 4.0

代码在最新的Chrome,FF甚至Edge中运行良好,但在IE11中生成工件。我的研究结果显示,在IE11中,函数polygonOffset改变了网格的Z位置,而不是深度buffor值!有人可以证实我的怀疑吗?我应该在Microsoft或THREEJS lib中报告错误吗?

2 个答案:

答案 0 :(得分:2)

似乎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中的禁用其他材质的此功能(polygonOffset = false)无法正常工作。其余的网格使用相同的因子和单位 - >工件是可见的。如果为其他网格设置了polygonOffset = true和默认值factor,则单位= {0,0),如示例中所示 - >图书馆设置新因素,单位和一切都很好。我认为,可以更改函数WebGLState.setPolygonOffset,以便为每个材质设置因子,单位,不仅对于polygonOffset = true,如果至少有一个具有polygonOffset = true的网格。

此致 瓦尔德马

答案 1 :(得分:1)

我在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入睡,只会产生安全更新。