まずは触ってみる
xcodeを起動
ファイル 新規プロジェクト
プロジェクトの名前は
HelloOpenGL
とした。
EAGLView.h
EAGLView.m
HellowOpenGL-Info.plist
HellowOpenGL.app
HellowOpenGL_Prefix.pch
HellowOpenGLAppDelegate?.h
HellowOpenGLAppDelegate?.m
main.m
MainWindow?.xib
Foundation.framework
OpenGLES.framework
QuartzCore.framework
UIKit.framework
OpenGLアプリ開発のテンプレート。 簡単な四角形が回転するコードがはじめから用意されている。まずはこのコードの意味を理解できるように勉強していきました。
iPhoneでOpenGLアプリを開発するにあたっての全般に関するガイドライン。パフォーマンスについても。
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
OpenGL ES 1.1の入門サイトではありませんが、OpenGLを初めての方はまず読んでおいていいかと。 最初の方のglBiginやglEndを使った描画方法はiPhoneのOpenGLでは使えませんが、OpenGLの関数や定数については共通のものもあり、非常にわかりやすくまとめられています。
http://wisdom.sakura.ne.jp/system/opengl/
こちらものOpenGL ES 1.1 向けではありませんが、OpenGL入門者は読んでおいた方がいいと思います。
http://iphonedevelopment.blogspot.com/
海外のブログで英語ですが、iPhone用のOpenGLの入門記事が多数あります。 OpenGLのチュートリアルサイトの「NeHe? Productions」のサンプルをiPhone向けにしています。
http://d.hatena.ne.jp/nakamura001/
はちゅねのアプリの作者様のブログ。はちゅねのソースコードも公開されています。 日本で数少ないiPhone OpenGL情報のブログで非常にありがたい情報です。
http://developer.apple.com/iphone/
Apple の iPhone 開発者向けサイトです。 iPhone Reference Library のページでサイドバーから「OpenGL ES」を選べば、いくつかの資料やサンプルが入手できます。
http://www.opengl.org/sdk/docs/
opengl.org のドキュメントサイトです。 reference pages に OpenGL の全ての関数に関する優れたリファレンスがあります。
http://www.khronos.org/registry/gles/
OpenGL ES の仕様に関するドキュメントが集積されているページです。 iPhone 3GS は OpenGL ES 1.1 と 2.0 の双方に対応していますが、 iPhone 3G 以前で利用できるのは OpenGL ES 1.1 のみなので注意してください。とくに OpenGL ES で利用できる拡張に関してはこちらを参照するのが良いでしょう。
http://www.imgtec.com/developers.asp
iPhone で使われている GPU の開発元である Imagination の開発者向けサイトです。 iPhone 特有の拡張機能に関してはこちらのサイトが参考になります。
http://journal.mycom.co.jp/column/iphone/index.html
iPhone アプリ開発全般に関するマイコミジャーナルの解説記事です。 iPhone の開発環境を整える際に参考になります。
iPhone OpenGL ES Tutorial Series http://web.me.com/smaurice/AppleCoder/iPhone_OpenGL/Archive.html
iPhone の OpenGL に関するチュートリアルが多数あります。
深度バッファとは、物体が重なったときに前後関係を正しく処理する、いわゆる隠面削除を自動処理するための機能です。ポリゴン(三角形)を描画する際にピクセル単位で視点からの距離(深度)を保存しておき、後に同じ場所にポリゴンを描画する際は保存されている深度より遠いピクセルを描画しないようにすることで、前後関係を正しく保ちます。この深度を保存するための領域を「深度バッファ」と呼ぶわけです。
このサンプルコードは下記のサイトに掲載されていたコードです。
起動時に深度バッファが作成され、 3 次元物体が正しく表示できるようになります。
掲載サイトURL
http://webos-goodies.jp/archives/getting_started_with_opengl_on_iphone.html
// 深度バッファのハンドルを格納するグローバル関数 static GLuint depthBuffer = 0; static void createDepthBuffer(GLuint screenWidth, GLuint screenHeight) { if(depthBuffer) { glDeleteRenderbuffersOES(1, &depthBuffer); depthBuffer = 0; } glGenRenderbuffersOES(1, &depthBuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthBuffer); glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, screenWidth, screenHeight); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthBuffer); glEnable(GL_DEPTH_TEST); }
- (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); // 深度バッファを(再)作成する createDepthBuffer(backingWidth, backingHeight); 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; }