2017-04-18 109 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

相關問題