[[iPhoneプログラミング一覧]]
*目次 [#oa3773b5]
#contents

*事前準備 [#b122a3d6]
まずは触ってみる

xcodeを起動

ファイル 新規プロジェクト

プロジェクトの名前は

HelloOpenGL

とした。

*自動生成されたファイル [#caf192af]

EAGLView.h

EAGLView.m

HellowOpenGL-Info.plist

HellowOpenGL.app

HellowOpenGL_Prefix.pch

HellowOpenGLAppDelegate.h

HellowOpenGLAppDelegate.m

main.m

MainWindow.xib

*自動的にインポートされたフレームワーク [#r270d35f]

Foundation.framework

OpenGLES.framework

QuartzCore.framework

UIKit.framework

*参考情報一覧 [#j3803ea6]

**Xcode「OpenGL ES Application」テンプレート [#yd1d5938]
OpenGLアプリ開発のテンプレート。
簡単な四角形が回転するコードがはじめから用意されている。まずはこのコードの意味を理解できるように勉強していきました。

**iPhone OS プログラミングガイド: 「グラフィックスと描画」「OpenGL ESを使用した描画」 [#udc26e08]
iPhoneでOpenGLアプリを開発するにあたっての全般に関するガイドライン。パフォーマンスについても。

**GLUTによる「手抜き」OpenGL入門 [#v1db5349]
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html

OpenGL ES 1.1の入門サイトではありませんが、OpenGLを初めての方はまず読んでおいていいかと。
最初の方のglBiginやglEndを使った描画方法はiPhoneのOpenGLでは使えませんが、OpenGLの関数や定数については共通のものもあり、非常にわかりやすくまとめられています。

**OpenGL入門 [#s387b567]
http://wisdom.sakura.ne.jp/system/opengl/

こちらものOpenGL ES 1.1 向けではありませんが、OpenGL入門者は読んでおいた方がいいと思います。

**iPhone Development (ブログ) [#rf0b5f24]
http://iphonedevelopment.blogspot.com/

海外のブログで英語ですが、iPhone用のOpenGLの入門記事が多数あります。
OpenGLのチュートリアルサイトの「NeHe Productions」のサンプルをiPhone向けにしています。


**強火ですすめ(ブログ) [#f07520be]
http://d.hatena.ne.jp/nakamura001/

はちゅねのアプリの作者様のブログ。はちゅねのソースコードも公開されています。
日本で数少ないiPhone OpenGL情報のブログで非常にありがたい情報です。

**iPhone Dev Center [#kfd2696c]
http://developer.apple.com/iphone/

Apple の iPhone 開発者向けサイトです。 iPhone Reference Library のページでサイドバーから「OpenGL ES」を選べば、いくつかの資料やサンプルが入手できます。

**OpenGL SDK [#i944e4ce]
http://www.opengl.org/sdk/docs/

opengl.org のドキュメントサイトです。 reference pages に OpenGL の全ての関数に関する優れたリファレンスがあります。

**Khronos OpenGL ES API Registry [#wd3663f6]
http://www.khronos.org/registry/gles/

OpenGL ES の仕様に関するドキュメントが集積されているページです。 iPhone 3GS は OpenGL ES 1.1 と 2.0 の双方に対応していますが、 iPhone 3G 以前で利用できるのは OpenGL ES 1.1 のみなので注意してください。とくに OpenGL ES で利用できる拡張に関してはこちらを参照するのが良いでしょう。

**PowerVR Insider [#yed844c8]
http://www.imgtec.com/developers.asp

iPhone で使われている GPU の開発元である Imagination の開発者向けサイトです。 iPhone 特有の拡張機能に関してはこちらのサイトが参考になります。

**実践! iPhoneアプリ開発 [#b6abe51b]
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 に関するチュートリアルが多数あります。

*深度バッファ [#y91fb5a2]
深度バッファとは、物体が重なったときに前後関係を正しく処理する、いわゆる隠面削除を自動処理するための機能です。ポリゴン(三角形)を描画する際にピクセル単位で視点からの距離(深度)を保存しておき、後に同じ場所にポリゴンを描画する際は保存されている深度より遠いピクセルを描画しないようにすることで、前後関係を正しく保ちます。この深度を保存するための領域を「深度バッファ」と呼ぶわけです。

**深度バッファを有効にするサンプル [#w932eeb7]

このサンプルコードは下記のサイトに掲載されていたコードです。

起動時に深度バッファが作成され、 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;
}
 }
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS