0

iPadのCocos2DアプリにOpenGLES3Dビューを挿入しようとしています。私はこれらのフレームワークに比較的慣れていないので、基本的にCCLayerにこれらの行を追加しました。

CGRect rScreen;
// some code to define the bounds and origin of my frame
EAGL3DView * view3d = [[EAGL3DView alloc] initWithFrame:rScreen] ;

[[[CCDirector sharedDirector] openGLView] addSubview: view3d];

[view3d startAnimation]

私が3Dパーツに使用しているコードは、Apple Developerのサンプルコードに基づいています:http ://developer.apple.com/library/mac/#samplecode/GLEssentials/Introduction/Intro.html 私が行った唯一の変更はプログラムでビューを作成し(xibファイルなし、initWithCoder-> initWithFrame ...)、Cocos2Dに付属するEAGLViewに干渉しないように、EAGLViewクラスとファイルの名前をEAGL3DViewに変更しました。

ここで私の問題に移ります。これらを実行すると、「-[EAGLViewswapBuffers]でOpenGLエラー0x0502」が発生します。3Dビューは正しく表示されますが、それ以外の場合は完全にピンク色の画面になります。

Cocos2d EAGLViewのswapBuffers関数に入ったところ、重要なコードのブロックはこれだけであることがわかりました。

if(![context_ presentRenderbuffer:GL_RENDERBUFFER_OES])
    CCLOG(@"cocos2d: Failed to swap renderbuffer in %s\n", __FUNCTION__);

これは「if」条件に入りません(presentRenderbufferはnull値を返しませんが、後でCHECK_GL_ERROR()が0x0502エラーを返すため、正しくありません)。

したがって、3DビューによるOpenGL ESレンダーバッファーのある種の誤ったオーバーライドがあり(Cocos2dもOpenGL ESを使用しているため)、Cocos2Dビューが正しく機能しないことを理解しています。これは私がこれまでに得たものであり、それを修正するために何をする必要があるかを正確に理解することはできません。それで、あなたはどう思いますか?

これが初心者の問題にすぎないことを願っています…</p>

Pixelvore

4

1 に答える 1

0

あなたがやろうとしていることに対する正しいアプローチは次のとおりだと思います:

  1. 独自のカスタム CCSprite/CCNode クラスを作成します。

  2. Apple サンプルから使用しているすべての GL コードをそのクラスに入れます (つまり、クラスのdraworvisitメソッドをオーバーライドします)。

2 つの GL ビューをうまく連携させたい場合は、この投稿を読んでみてください。ビューに異なるバッファーを関連付ける方法が説明されています。

最初のアプローチについては、この投稿この投稿をご覧ください。

実際には、最初のアプローチはより複雑になる可能性がありますが (Apple サンプルが open gl をどのように実行しているかによって異なります)、2 番目よりもメモリの使用量が少なくなり、より最適化されます。

于 2012-07-05T09:19:51.897 に答える