私はOpenGL全般にかなり慣れていません。サンプルコードを使用して、OpenGL ES 1.1ベースの2D iPhoneゲームを作成しました。OpenGL ES 2.0は1.1とは大幅に異なるという印象を受けています。それでは、1.1コードを2.0に更新するには何が必要ですか?
「プッシュマトリックス、変換、回転、2Dテクスチャの描画、ポップマトリックス」という、基本的な描画パターンに慣れています。2.0の「同等」とは何ですか?
私はOpenGL全般にかなり慣れていません。サンプルコードを使用して、OpenGL ES 1.1ベースの2D iPhoneゲームを作成しました。OpenGL ES 2.0は1.1とは大幅に異なるという印象を受けています。それでは、1.1コードを2.0に更新するには何が必要ですか?
「プッシュマトリックス、変換、回転、2Dテクスチャの描画、ポップマトリックス」という、基本的な描画パターンに慣れています。2.0の「同等」とは何ですか?
回答:
OpenGL ES 2.0はES 1.1とは大きく異なります。固定関数パイプラインはもうないので、おなじみの「プッシュマトリックス、変換、回転」などはすべてなくなりました。
代わりに、頂点とフラグメントのシェーダーの概念があります。これらは、各頂点および各ピクセルに対して実行される小さなプログラムです。ここで、すべての変換やその他の効果が発生します。コードは頂点データを準備し、OpenGLに構造を伝え、シェーダーに渡します。
ただし、すべてが失われるわけではありません。OpenGLの一部の部分は変更されていません。たとえば、さまざまな状態の設定(ブレンドモード、深度比較)やテクスチャの作成などです。
OpenGL ES 2.0を効果的に使用するには、3Dコンピュータグラフィックスの基本を習得する必要があります。そのため、優れた入門書を入手し、原則を学習してください。次に、OpenGL ES 2.0に進み、シェーダーの作成を開始できます。これは良いOpenGL ES 2.0の本です。
最後に、OpenGL ES 2.0に移行する必要があると想定しないでください。新しいデバイスはすべて下位互換性があるため、ES 1.1で行うことができない特別な必要がない限り、ES 1.1を引き続き使用できます。
シェーダーが大好きなので、OpenGL ES 1.XからOpenGL ES 2.Xに3Dエンジンを移植しました。レンダラーは個別のものであり、コードを共有しません。
簡単に翻訳できます:
より難しい(シェーダーが必要):
あなたのコードを移植するために、私はあなたに勧めます:
第一歩
ステップ2
各マテリアルに必要な頂点座標、法線、テクスチャ座標、色情報としてすべての頂点情報をリストします
これらの情報により、どのGLSLプログラム(頂点+フラグメントシェーダー)を記述する必要があるかがわかります。
ステップ3
ステップ4:最適化
OpenGL ES 2.0 は OpenGL ES 1.1の新しいリビジョンではありません。言い換えれば、OpenGL ES 2.0は、より優れたOpenGL ES 1.1ではありません。
まあまあ、彼らはすべてを変えた。
その単純なステートメントのインポートは見落としがちです。考慮:
OpenGl 2.0 は OpenGL 1.5の新しいリビジョンです。OpenGL 2.0 は、より優れたOpenGL 1.5です。
つまり、OpenGl 1.5を使用していて、上位互換性を維持したい場合は、2.0に移行する必要があります。
OpenGL ESについても同様です。1.1は2.0に取って代わられませんでした。それらは異なる基準です。名前が付けられていれば、混乱は解消された可能性があります。
注:技術的には、これは完全には当てはまりません。その理由は、2.0シリーズで1.0シリーズを実装できるからです。固定パイプライン関数をシェーダーとして設定する必要があるだけです。
ここでの他の回答とは別に、私は最近、C ++ライブラリのgles2-bcを見つけました。
既知の制限がいくつかあり、私自身はそれを使用していませんが、参照用にリンクを投稿したいと思いました。