5

を呼び出して、ジオメトリの背面のみを描画していgl.cullFace(gl.FRONT)ます。これらの表面の光の色合いが私が期待するものと反対であることに気づきました。正しくレンダリングするには、背面のサーフェス法線の方向を明示的に反転する必要がありますか、それともOpenGLサブシステムが自動的に反転しますか?

編集:考えてみると、法線を手動で逆にすると、正面になり、カリングされます。

4

1 に答える 1

8

OpenGLの前面/背面の検出は、通常ではなく、巻線に基づいています。法線ベクトルは、ポリゴンが前面と見なされるか背面と見なされるかには影響しません。

あなたがやりたいのはglLightModelGL_LIGHT_MODEL_TWO_SIDEのオプションを設定することだと思います。

GL_LIGHT_MODEL_TWO_SIDE

paramsは、ポリゴンに対して片面または両面のライティング計算を実行するかどうかを指定する単一の整数または浮動小数点値です。ポイント、ライン、またはビットマップのライティング計算には影響しません。paramsが0(または0.0)の場合、片側照明が指定され、前面のマテリアルパラメータのみが照明方程式で使用されます。それ以外の場合は、両面照明が指定されます。この場合、後ろ向きのポリゴンの頂点は、後ろ向きのマテリアルパラメータを使用して照らされます。 照明方程式が評価される前に、法線を逆にします。前面のポリゴンの頂点は、法線に変更を加えることなく、常に前面のマテリアルパラメータを使用して照らされます。初期値は0です。

これは固定パイプラインにのみ適用されることに注意してください。

===編集===

カスタムシェーダー(GLES2.0またはOpenGL3 +)を使用すると、フラグメントシェーダーで特別なブール値にアクセスできますgl_FrontFacing。シェーダーで両面照明をエミュレートするには、をテストしgl_FrontFacing、通常の値に負の値を掛けますfalse

于 2012-04-11T02:21:54.667 に答える