2012-04-11 5 views
4

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

EDIT:私はノーマルを手作業でやり直すと前面になっていき、それが淘汰されます。

答えて

8

OpenGLの前面/背面検出は、巻き取りに基づいており、通常ではありません。法線ベクトルは、ポリゴンが前面または背面と見なされるかどうかに影響を与えません。

GL_LIGHT_MODEL_TWO_SIDEオプションをglLightModelに設定しています。

GL_LIGHT_MODEL_TWO_SIDE

paramsは一次元または両面照明計算は、ポリゴンのために行われているかどうか を指定する単一の整数または浮動小数点値です。 点、 行、 またはビットマップのライティング計算には影響しません。 paramsが0(または0.0)の場合、片面照明が指定されており、 であり、照明式の にはフロントマテリアルパラメータのみが使用されています。 それ以外の場合は、両面照明が指定されます。 この場合、裏面のポリゴンの頂点は、バックマテリアルパラメータ を使用して に点灯され、照明方程式が評価される前にノーマルが反転されます。 正面ポリゴンの頂点は、 のフロントマテリアルパラメータである を使用して常に法線を変更せずに点灯します。初期値は0です。

これは固定パイプラインにのみ適用されます。

=== === EDIT

カスタムシェーダ(GLES2.0またはOpenGL3 +)を使用して、その後、フラグメントシェーダでは、あなたは特別なブールgl_FrontFacingへのアクセス権を持っています。シェーダで両面照明をエミュレートするには、gl_FrontFacingをテストし、falseの場合はノーマルを1に掛けます。

+0

'glLightModel'に相当するOpenGL-ESはありますか? – Jayesh

+0

@Jayesh 1.0または2.0? – Tim

+0

OpenGL ES 2.0。特定のWebGL。 – Jayesh

関連する問題