1

テクスチャを iOS 5 の方法 (GLKView を使用) で動作させるのに問題がありますが、昔ながらの OpenGLES 1.1 を使用しています。古い 2D (スプライト) スタイルのゲーム フレームワークを移行しています。Xcode での OpenGL ゲームのストック例を取り上げ、それを修正して、kEAGLRenderingAPIOpenGLES1 で EAGLContext を初期化しました。また、古いテクスチャ ローダー アルゴリズムを使用しているため、GLKTextureLoader と GLKBaseEffect を使用しようとはしていません (ベース エフェクトはシェーダーで動作します)。これは私が現在ViewControllerに持っているものです:

- (void)viewDidLoad {
[super viewDidLoad];

[self setContext : [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]];
[EAGLContext setCurrentContext: [self context]];

GLKView *view = (GLKView *)self.view;
[view setContext: [self context]];
[view setDrawableDepthFormat: GLKViewDrawableDepthFormatNone];
[view setDrawableColorFormat: GLKViewDrawableColorFormatRGBA8888];
[view setMultipleTouchEnabled: NO];
[self setupGL];
}

そしてsetupGLで:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, backingWidth, 0, backingHeight, -1, 1);
glViewport(0, 0, backingWidth, backingHeight);    
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//landscape mode
glTranslatef(backingWidth/2, backingHeight/2, 0);
glRotatef(90, 0, 0, 1);
glTranslatef(-backingHeight/2, -backingWidth/2, 0);

glDisable(GL_DEPTH_TEST);

glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);    
glEnableClientState(GL_VERTEX_ARRAY);    
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ALPHA);

問題はここから始まります。上記の最後の行で OpenGL から 0x0500 エラーが発生しています。これは古いコードで問題なく動作するためです (または、少なくともそうでない場合は、問題の原因ではありません)。GL_APLHA の代わりに GL_MODULATE を使用すると、GL エラーは発生しませんが、テクスチャは機能しません。これは私がそれらをロードする方法です:

glGenTextures(1, &textures[textureNum]);
glBindTexture(GL_TEXTURE_2D, textures[textureNum]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

残りは基本的に、頂点データを OpenGL に送信する古い renderEngine への呼び出しですが、古いコードで動作するので問題ないと思います。それで、私はここで何が恋しいですか?どんな助けでも大歓迎です。

4

2 に答える 2

0

これに似た問題があるようです。つまり、テクスチャに事前に乗算されたアルファがありません。

于 2012-04-18T14:08:01.787 に答える
0

GLKit は、1.1 ではなく、OpenGL ES 2.0 を中心に構築されています。iOS 5.0 リリース ノートから:

GLKit フレームワーク (GLKit.framework) には、OpenGL ES 2.0 アプリケーションの作成に必要な作業を簡素化する一連の Objective-C ベースのユーティリティ クラスが含まれています。

OpenGL ES 1.1 コンテキストで使用することは意図されておらず、そのようなコンテキストで使用する場合、GLKit クラスは機能しないはずです。フレームバッファのセットアップのような単純なものであっても、2.0 は同じタスクに対して 1.1 とは異なる名前の関数を使用します。

何らかの理由で OpenGL ES 1.1 プロジェクトを作成する場合は、Xcode によって生成されたものとは異なるテンプレートから開始し、CAEAGLLayer を使用して独自の UIView を構築します。

于 2012-04-18T14:32:59.450 に答える