一个简单的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中报告错误吗?
答案 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入睡,只会产生安全更新。