Open GL ES 2.0を使用するようにOpenGL ES 1.1ベースのiPhoneゲームを更新する


7

私はOpenGL全般にかなり慣れていません。サンプルコードを使用して、OpenGL ES 1.1ベースの2D iPhoneゲームを作成しました。OpenGL ES 2.0は1.1とは大幅に異なるという印象を受けています。それでは、1.1コードを2.0に更新するには何が必要ですか?

「プッシュマトリックス、変換、回転、2Dテクスチャの描画、ポップマトリックス」という、基本的な描画パターンに慣れています。2.0の「同等」とは何ですか?

回答:


9

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を引き続き使用できます。


2
マトリックスのプッシュ、変換、回転などはすべてまだあります。消えたのは即時モード描画です。したがって、もはやglVertex()glNormal()などは必要ありません。代わりに、頂点配列または頂点バッファオブジェクトを使用して、ジオメトリをカードに取得する必要があります。
ボブソマーズ2010

3
私はかなり確信して行列スタックは2.0 ES iPhone上でのOpenGLで削除されましたよ@Bobサマーズ、そう等。、翻訳、行列をプッシュがない
5ound

うーん、私は100%確実ではないことを認めなければなりません。私はモバイル向けのOpenGLを実際にはあまり行っていないためです。ただし、マトリックススタックは存在する必要があると思います。それなしでどのようにジオメトリをインスタンス化しますか?
ボブ・ソマーズ2010

@Bob OpenGL ES 1.1とOpenGL 1.5を比較している場合、コメントは正確です。ES 2.0は完全に別の獣であり、マトリックス操作は確かになくなっています。もちろん、C ++マトリックスクラスのライブラリを入手できる場所はたくさんあります。
U62

@Bob Somers:自分で計算したマトリックスのユニフォームを頂点シェーダー(いわゆるモデルビューマトリックス)に渡して、ジオメトリをインスタンス化します。
バーバー、2010

7

シェーダーが大好きなので、OpenGL ES 1.XからOpenGL ES 2.Xに3Dエンジンを移植しました。レンダラーは個別のものであり、コードを共有しません。

簡単に翻訳できます:

  • テクスチャ管理
  • フレームバッファオブジェクト
  • ブレンド

より難しい(シェーダーが必要):

  • 固定パイプライン変換(回転、スケール...)
  • 点灯

あなたのコードを移植するために、私はあなたに勧めます:

第一歩

  • GLSL 1.2を学ぶ:WebGLチュートリアルを読むことができます
  • いくつかのシェーダーシェーダーおもちゃを書いてみてください

ステップ2

  • あなたが持っているすべての材料をリストしてください(またはレンダリング技術)
  • 各マテリアルに必要な頂点座標、法線、テクスチャ座標、色情報としてすべての頂点情報をリストします

    これらの情報により、どのGLSLプログラム(頂点+フラグメントシェーダー)を記述する必要があるかがわかります。

ステップ3

  • シェーダーコンパイル関数を記述し、各情報をログに記録する
  • クワッド(2つの三角形)を備えた最小プログラムOpenGL ES 2.Xを実装する
  • GLSLプログラムを1つずつ実装してテストする

ステップ4:最適化


3

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に取って代わられませんでした。それらは異なる基準です。名前が付けられていれば、混乱は解消された可能性があります。

  • OpenGL ESを修正
  • OpenGL ESシェーダー

注:技術的には、これは完全には当てはまりません。その理由は、2.0シリーズで1.0シリーズを実装できるからです。固定パイプライン関数をシェーダーとして設定する必要があるだけです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.