HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > WebGL

Opera(ver.12)の WebGL バグ?

文責:遠藤 理平 (2012年10月10日) カテゴリ:WebGL(39)

WebGL の勉強中に、Chrome、Firefox、 Opera の動作確認中に、 Operaだけ意図通りに動作しない場合があることに気がついて、足掛け2日悩み続けました。 その結果、Opera のシェーダ内での演算にバグらしきものがあることが分かりました。 問題は、「法線行列(モデルビュー変換行列の逆転置行列)」を「uniform mat3」型の変数としてシェーダに送って、法線ベクトルと演算する際に起こっているようです。。

まずは、挙動の違いを Learing WebGL Lesson07 を題材にみてみます。 下図の左が「Chrome」、右が「Opera」です。

両方とも実行直後の様子ですが、見た目が異なります。 平行光ベクトルが画面手前から奥の方へと向かっているのですが、「Opera」の方ではそれが反映されていないことがわかります。

次に、「法線行列(モデルビュー変換行列の逆転置行列)」のバグであることを検証してみます。 ソースを見るとバーテックスシェーダ内に

vec3 transformedNormal = uNMatrix * aVertexNormal;

との記述がありますが、これを

vec3 transformedNormal =  aVertexNormal;

と「法線行列(モデルビュー変換行列の逆転置行列)」を削除してまた比較してみた結果が次の図です。

左の「Chrome」と右の「Opera」は同じに見えます。 つまり、「uNMatrix」に違いが存在していることがわかります。 ちなみに、シェーダに送る前までの行列にブラウザごとの違いはJavascript のデバッカーで調べてもありませんでした。 つまり、シェーダ内部で想定外のことが起こっているようです。



タグ: ,

▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ