2017-04-18 11 views
2

簡単なzファイティングの問題。polygonOffsetはIE11では動作しませんか?

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

polygonOffset: true, 
polygonOffsetFactor: 1.0, 
polygonOffsetUnits: 4.0 

コードは、最新のクロム、FF、でもエッジで正常に動作しますが、IE11での成果物を生成します。私の発見は、IE11では、関数polygonOffsetは深度バッファ値ではなくメッシュのZ位置を変更することを示しています。誰かが私の疑惑を確認できますか? 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 
})); 

2つの形状は、両方のメッシュ(行が正常に動作)している場合にのみ起こるようです。あまり意味がありませんが(Windows上のすべてのブラウザは、ネイティブGLモードに強制しない限り、ANGLEでレンダリングされます)、これはIEの問題です。

Edgeで元のコードをテストしたところ、正常に動作しました。マイクロソフトではIEをかなり眠っており、今後のセキュリティ更新プログラムのみを作成している。

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 =と1つのメッシュがある場合、ライブラリはgl.POLYGON_OFFSET_FILLが可能になります。

+0

私の答えを見てください。これはIE11固有の問題ではないようですが、WebGLState.setPolygonOffsetの変更は、すべてのマテリアルで回避策(polygonOffsetの設定:true)を必要とせずにこの問題を解決する必要があります。 – wapipl

+0

これは私にとってIE11、Win7ではうまくいきませんでした。何がうまくいったのですか?「gl_Position.z - = 0.001;」を「上に」(カメラのPOVから)すべきメッシュの頂点シェーダに追加しました。 – ahwayakchih

+0

@ahwayakchih Strange、私のIE11テストもWin7にあったからです。あなたの "マジックナンバー"の回避策はうまくいくが、あなたのユースケースでしか動かないかもしれない。さまざまな深さのシーンで異なるサイズのメッシュを作成するとき、 '0.001'の違いを念頭に置いてください。 – TheJim01

2

WebGLState.setPolygonOffset機能に問題があるようです。 IE11でと表示され、他の素材(polygonOffset = false)でこの機能を無効にすると、正しく動作しません。残りのメッシュは同じ要素を使用し、ユニット→アーティファクトが表示されます。他のメッシュを設定した場合、polygonOffset = trueとデフォルト値factor、あなたの例のようにunits = {0,0) - >ライブラリは新しい要素を設定し、単位はすべて正常です。私は、polygonOffset = trueのメッシュが少なくとも1つあれば、polygonOffset = trueだけでなく、素材ごとに単位を設定するために、関数WebGLState.setPolygonOffsetを変更できると思います。

よろしく ヴァルデマー

+0

これはTHREE.jsの開発者に提出してください。バグレポートはhttps://github.com/mrdoob/three.js/issuesで作成し、問題のリリースでメソッドを更新する必要があるかどうかを判断することができます。 – TheJim01

関連する問題