2017-04-18 112 views
2

一个简单的z战斗问题。polygonOffset在IE11中不起作用?

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

polygonOffset: true, 
polygonOffsetFactor: 1.0, 
polygonOffsetUnits: 4.0 

代码在最新的Chrome,FF,甚至边缘,但在IE11产生的文物工作正常。我的发现表明,在IE11中,函数polygonOffset改变了网格的Z位置,而不是深度buffor的值!有人可以证实我的怀疑吗?我应该在Microsoft还是在THREEJS库中报告错误?

+0

你怎么弄清楚,它改变z位置?这个特性对我来说有点难以理解,我一直认为它可以将深度缓冲区适合的最小数量的像素推向像素,但似乎并不像它那样工作。我需要在ie11中试试这个,但是当你开始编号时会发生什么? – pailhead

+0

请发表您的其他代码。如果你的小提琴被删除,那么你的问题的背景消失。 – TheJim01

回答

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进入睡眠状态,只会产生未来的安全更新。

+0

看到我的答案。看起来这不仅仅是IE11特有的,WebGLState.setPolygonOffset中的更改应该可以解决此问题,而无需在每种材质中使用变通办法(设置polygonOffset:true)。 – wapipl

+0

这在IE11,Win7上不适用于我。所做的工作是将'gl_Position.z - = 0.001;'添加到应位于“顶部”(来自相机POV)的网格物体的顶点着色器中。 – ahwayakchih

+0

@ahwayakchih奇怪,因为我的IE11测试也在Win7上。你的“幻数”解决方法可以工作,但它可能只适用于你的用例。请牢记“0.001”在不同深度场景中创建不同大小的网格时所产生的差异。 – TheJim01

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和默认值因子,单元= {0,0),如您的示例 - >库设置新因子,单位和一切都很好。我认为,可以更改函数WebGLState.setPolygonOffset,以便为每个材质设置因子,单位,不仅对于polygonOffset = true,如果至少有一个polygonOffset = true的网格,则为单位。

问候 瓦尔德马

+0

你应该带上THREE.js开发者。在这里创建一个错误报告:https://github.com/mrdoob/three.js/issues,他们可以决定问题是否保证更新发布中的方法。 – TheJim01

相关问题