glTexEnv
は、テクスチャからのサンプルは、材料の色と結合する方法のようなものを設定します。環境マッピングは行いません。固定パイプラインデスクトップOpenGLでは、おそらくglTexGen
を使用します。 OpenGL ESにはglTexGen
はありません。
代わりにできるのは、テクスチャマトリックススタックを利用することです。 ESは3Dテクスチャをサポートしていませんが、3Dテクスチャ座標をサポートしています。したがって、頂点の法線をテクスチャ座標に複製し、テクスチャマトリックススタックを通常の行列(オブジェクト空間からワールド空間への変換の回転部分だけです)にロードするようにしてください。そうすれば、ワールド空間の法線に相当する3Dテクスチャ座標になります。 GLをそれらを2dインデックスとしてテクスチャに使用するようにすると、環境マッピング用の球マップを使用できます。
これはAndroidの例ではありませんが、ノキアの古いSymbian/Series 60の例では、CPU上での通常の計算(明示的)のような愚かなものはありません。this oneです。リンクされた記事では、アプローチを説明し、それを実装する.cppへのリンクが含まれています。 OpenGL ESは、プラットフォーム間では同じですが、エクステンションは別として、Androidに直接移植する必要があります。
あなたが尋ねる意味ではありません。コンセプトは、回転していないテクスチャのプリミティブがオブジェクトを囲むということです。各頂点の環境マップ座標は、頂点から法線に沿ってレイを投射して概念上の境界ジオメトリに当たるまで計算されます。したがって、有効な法線が必要ですが、テクスチャ座標を指定する必要はありません。
少なくとも私はそれを理解していません。フレネル効果は、あなたとサーフェスの間の角度に依存しますが、環境マッピングはワールド空間内のオブジェクトの回転のみに依存します。
はい、ただし、複数のレンダリングパスを使用する必要があります。 ESでは少なくとも2つのテクスチャユニットが必要ですので、少なくともenvironment + maskを実行できます。適用する他のコンポーネントがある場合は、フレームバッファにすべてを蓄積しながら複数のレンダリングを行うことができます。