2011-10-15 7 views
5

私はcocos2dでiPhoneアプリケーションを作成していますが、私は次のOpenGL ES 1.1コードを利用しようとしています。しかし、私はOpenGLにうまくいかず、私のアプリはOpenGL ES 2.0を利用しているので、それを変換する必要があります。OpenGL ES 1.1から2.0への大きな変更?

こうして私は、次のコードをES 1.1からES 2.0に変換するのがどれほど難しいのだろうと思いましたか?どのメソッドがどのようなメソッドを置き換える必要があるか教えてくれるソースがありますか?

-(void) draw 
{ 
    glDisableClientState(GL_COLOR_ARRAY); 
    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisable(GL_TEXTURE_2D); 

    glColor4ub(_color.r, _color.g, _color.b, _opacity); 
    glLineWidth(1.0f); 
    glEnable(GL_LINE_SMOOTH); 

    if (_opacity != 255) 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    //non-GL code here 

    if (_opacity != 255) 
     glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); 

    glEnableClientState(GL_COLOR_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnable(GL_TEXTURE_2D); 
} 
+0

ここでESやデスクトップについて話していますか?大きな違いをもたらします。前者の場合(openglタグをreomve)、それは簡単ではありません。後者の場合(esタグを削除してください)、protingの問題はありません。 –

+0

こんにちは、iPhoneなのでESです。 – FBryant87

+1

ああ、それを上書きする必要があります。この場合、移植は簡単ではなく、GLSLシェーダに入る必要があります。 –

答えて

9

OpenGLにあまり適していないのは簡単ではありません。

OpenGL ES 2.0には、固定機能パイプラインがありません。つまり、GLSLの頂点シェーダーとフラグメントシェーダーを使用して、頂点の変換、ライティング、テクスチャリングなどを自分ですべて管理する必要があります。あなた自身も変換行列を追跡しなければなりません。glMatrixModeglPushMatrixglTranslate、...はもうありません。

さらに、buitlin頂点属性もありません(glVertexglColor、...など)。したがって、これらの関数は対応する配列関数(glVertexPointer,glColorPointer、...など)とgl(En/Dis)ableClientStateと同様に扱われています。その代わりに、対応する頂点シェーダとともに汎用頂点属性関数(glVertexAttribglVertexAttribPointergl(En/Dis)ableVertexAttribArray)が必要です。これにより、これらの属性に正しい意味が与えられます。

少なくとも、シェイダーについて聞いたことがない人なら、1.1から2.0への移植が本当に大きな変化だと思うので、良いOpenGL ES 2.0チュートリアルや本を調べることをお勧めします。

+1

ありがとう、私は最初から2.0を試してみるかもしれない。私は2.0がより多くの可能性を提供することを理解していますが、1.1のショートカットも提供できませんでしたか?彼らが座って「私が知っているのは、バージョン2.0ではすべてを取り出し、人々がそれをすべて自分たちでやってもらう」と信じられませんでした。私はいくつかの低レベルのものを学ぶために時間をかけても構わないが、チュートリアルを見ると回転キューブを作るのに約1時間かかります。私は単純な線の描画などのために驚いています。 – FBryant87

+1

@ user666254あなたは、単純なものを設定するには今やより多くの努力が必要であり、APIやパイプライン全体を理解することなく多くのことを行うことはできないので、初心者の方にとってはもっと学びにくいのは間違いありません。しかし一方では、間違ったやりかた( 'glBegin/glEnd'など)をするのがはるかに難しくなり、APIははるかにクリーンです。そして、とにかくシェイダーを使わないで深刻なアプリケーションを見つけることはありません(おそらく、今日は確かに明日ではありません)。 –

+1

@ user666254何か良いですか?新しいハードウェアアクセラレーションAPIハードウェアベンダーは、既に存在する可能性のサブセットを達成するためにサポートする必要がありますか?あまり起こりそうもない。簡単なことのために、もちろんOpenGL ES 1.1を使用することができます。しかし、どこかに未来への進展が必要です。 –

関連する問題