今回も以前のエントリーの内容をiPhoneSDK3.1以降用に書きます。
今回はOpenGL ES1.1用で表示する方法を書きます。
前準備
まず"iPhoneでのOpenGLの簡単な遊び方 (iPhoneSDK3.1以降)"を読んで、OpenGL ES1.1を使うように修正してください。
この修正をしたことを前提に進めます。
立方体のオブジェクト定義
"ES1Renderer.m"のメソッドrenderでオブジェクトの定義をしているので、squareVerticesの定義とsquareColorsを以下の様に修正します。
static const GLfloat squareVertices[] = { -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, }; static const GLubyte squareColors[] = { 255, 255, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 255, 255, };
その他のRenderの修正
"ES1Renderer.m"のメソッドrender内にさらに修正を加えます。
glClearでZバッファもクリアするようにします。
"glClear(GL_COLOR_BUFFER_BIT)"と書いてある分を探して、GL_DEPTH_BUFFER_BITを追加してください。
glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT);
glDrawArraysで指定してある要素の数を変更
”glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);”と書いてある分を探して、要素の数を4から24に変更してください。
glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);
Zバッファの初期設定を追加
以下の文を参考にして、Zバッファの初期設定を追加してください。
"ES1Renderer.m"のメソッドresizeFromLayer内に追加します。
- (BOOL) resizeFromLayer:(CAEAGLLayer *)layer { // Allocate color buffer backing based on the current layer size glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer]; glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); // ここから追加 glGenRenderbuffersOES(1, &depthRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); glEnable(GL_DEPTH_TEST); // ここまで追加 if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); return NO; } return YES; }
実行結果
ここまでで実行すると、以下の様に立方体が回転しています。
調整をしていないので、少々いびつですが・・・
iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
- 作者: 木下誠
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2009/09/08
- メディア: 大型本
- 購入: 7人 クリック: 197回
- この商品を含むブログ (14件) を見る
- 作者: 横江宗太(株式会社パンカク)
- 出版社/メーカー: インプレス
- 発売日: 2009/12/18
- メディア: 単行本
- 購入: 18人 クリック: 256回
- この商品を含むブログ (44件) を見る