MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

MOSA「iOS基礎技術入門シリーズ」トップへ戻る

GLKit 入門

 
 
 

「GLKit 入門」概要

GLKit 入門」には、iOSのGLKitフレームワークに関するサンプルアプリのXcode 5プロジェクトと、それを解説した入門書籍(iBooks対応 70ページのePubファイル)が含まれています。これにより、サンプルアプリ、iBooks用の入門書籍、ソースコードの3点を活用しながらGLKitの使用方法を習得できます。書籍やサンプルの解説内容はiOS 6までの機能となっていますのでご注意ください。サンプルアプリの開発環境はXcode 5で、起動環境はiOS 6.0以上が搭載されたiPadiPad AiriPad miniとなります。

【ご注意】本アプリはOpenGL ES自体の解説書ではありません。またゲームエンジンなどを使いOpenGL ESをフル活用している上級開発者向けでもありません。OpenGL ESについてはそれほど詳しくないが「自分のアイデアを実現するために、GLKitやOpenGL ESの能力を開発中のアプリでうまく生かせないか?」と考えられている方に最適な入門書です。何かしらの処理の高速化については幾つかのヒントが見つかるかもしれません。

「GLKit 入門」目的

iOSにおいて3D描画を担当しているフレームワークはOpenGL ESです。OpenGLと聞くとゲームなどでのリアルな3Dオブジェクト描画を思い浮かべますが、iOSでは高速な2D描画、アニメーション、画像処理などにもフル活用されています。デバイスに搭載されているCPUの処理能力はさほど高くはないのに、iPhoneやiPadがユーザに対して快適な操作環境を実現している秘密はここにあります。またOpenGL ES 2.0の能力を最大限に活用するために、iOS 5からUIKitと親和性の高いGLKitが導入されました。

iOSデバイスでは、GPUの能力をフルに引き出すためにOpenGL ESGLKitが大活躍しています。本アプリと書籍ではiOSアプリにおけるOpenGL ESとGLKitの活用方法や、iOS 5からGLKitが導入された意味や背景を解説したいと思います。具体的には、OpenGL ESGLKitを用いた高速な3Dや2D描画、アニメーション、画像処理などについてサンプルソースコードを提示しながら解説いたします。
 
著者:有限会社オッティモ 小池邦人

「GLKit 入門」書籍の章立て

(1) はじめに
(2) アプリ連携やサンプルソースコードについて
(3) OpenGL ESとGLKit関連の技術資料を入手する
(4) 開発ツールとサンプルソースコード
(5) iOSにおけるOpenGL ESとGLKit
(6) OpenGL ESでの処理の流れ(概要)
(7) OpenGL ESアプリのテンプレート(雛形)
(8) GLKitのGLKBaseEffectによる3D描画
(9) GLKitと独自シェーダによる3D描画
(10)シェーダプログラムのコンパイルとリンク
(11)GLSL(OpenGL Shading Language)
(12)iOS 4搭載のデバイスを考慮した場合
(13)OpenGL ES 1.1か2.0だけで処理する
(14)フレームバッファとレンダーバッファ
(15)GLKitを使わない3Dモデルの描画
(16)GLKitにおけるテクスチャマッピング
(17)フォグ、キューブマッピング、鏡面反射 
(18)OpenGL ES 1.1でのテクスチャマッピング
(19)OpenGL ES 2.0でのテクスチャマッピング
(20)複数のビューで3Dモデルの描画を行う
(21)関連書籍と3Dゲームエンジンの紹介

サンプルアプリの利用方法

XcodeプロジェクトをビルドしてサンプルアプリをiPadにインストールします。アプリが起動したら、まず最初にポップオーバーに表示されたiBooksアイコンをタップし、iBooks側に「GLKit 入門」書籍をインストールしてください。インストールが完了するとiBooksが起動して書籍がオープンされます。iPadにiBooksがインストールされていない場合には、App Store経由で先んじてiBooksを入手しておく必要があります。サンプルアプリをiOSシミュレータで起動した場合いは、iBooksが起動できないなど幾つかの機能が制限されますので、ご注意ください。

書籍はePubドキュメントです。本文については、iPad版 iBooksのテーマが「フルスクリーン」、フォント種類が「ヒラギノ明朝」、フォントサイズが「下から3番目」に合わせてレイアウトされています。その設定に変更してからiPadを縦向きにしてお読みください。Mac版 iBooksで読まれる場合には、表示を「単一ページ」に設定してください。

一度登録してしまえば、本文中に設定されているハイパーリンク経由でアプリの指定したデモを起動することが可能です。アプリを起動するハイパーリンクは先頭に「★」が付いています。その箇所のタップでアプリが起動され、リンク先に記載されているデモ内容が実行されます。アプリからはツールバーの「ビューアへ」ボタンをタップすることでiBooksへ戻ることが出来ます。

サンプルソースコードプロジェクトの開発環境はXcode 5です。ビルドして実機にインストールする場合には、Xcodeのプロジェクトターゲット(TARGETS)のGeneralで表示される「Build Identifier」と、Build Settingsの「Code Signing Identity」を正しく再設定してください。アプリの起動対象はiOS 6.0以上であり、iOS 7.0でも問題なく動作させることができます。

サンプルアプリにおけるデモの種類

(A)GLK1 BaseEffect利用
(B)GLK2 独自シェーダ利用
(C)GLK3 テクスチャ描画
(D)GLK4 霧とテクスチャ
(E)GLK5 キューブマップ
(F)GLK6 天球と鏡面反射
(G)GLK7 2面のGLKView
(H)GLK8 2コントローラ
(I)ES11 テンプレート1.1
(J)ES12 ティーポット描画
(K)ES13 テクスチャ画像
(L)ES14 両面テクスチャ
(M)ES15 画像の明度調整
(N)ES21 テンプレート2.0
(O)ES22 バッファオブジェ
(P)ES23 テクスチャ画像
(Q)ES24 合成をして描画
(R)ES25 画像の明度調整

サンプルアプリのソースコードについて

サンプルソースコードの各デモの実行環境は、ビューコントローラのクラス定義(.hファイル)とクラス実装(.mファイル)とnibファイル(.xibファイル)の3つにまとめられています。ソースファイル名の先頭3文字がカテゴリーを示し、次の数字が種類を表します。デモ内容とソースファイルの対応は、次の一覧表を参照してください。Macでの開発環境はXcode 5以上(ARC使用)アプリ動作環境はiOS 6以上となります。

GLK」… GLKitを用いたデモを示しています。
ES1」… OpenGL ES 1.1のみを用いたデモを示しています。
ES2」… OpenGL ES 2.0のみを用いたデモを示しています。

 GLK1ViewController ….(A)GLK1 BaseEffect利用
 GLK2ViewController ….(B)GLK2 独自シェーダ利用
 GLK3ViewController ….(C)GLK3 テクスチャ描画
 GLK4ViewController ….(D)GLK4 霧とテクスチャ
 GLK5ViewController ….(E)GLK5 キューブマップ
 GLK6ViewController ….(F)GLK6 天球と鏡面反射
 GLK7ViewController ….(G)GLK7 2面のGLKView
 GLK8ViewController ….(H)GLK8 2コントローラ
 ES11ViewController ….(I)ES11 テンプレート1.1
 ES12ViewController ….(J)ES12 ティポット描画
 ES13ViewController ….(K)ES13 テクスチャ画像
 ES14ViewController ….(L)ES14 両面テクスチャ
 ES15ViewController ….(M)ES15 画像の明度調整
 ES21ViewController ….(N)ES21 テンプレート2.0
 ES22ViewController ….(O)ES22 バッファオブジェ
 ES23ViewController ….(P)ES23 テクスチャ画像
 ES24ViewController ….(Q)ES24 合成をして描画
 ES25ViewController ….(R)ES25 画像の明度調整

例外として(H)のビューコントローラのみMainStoryboard.storyboardに定義されています(機能がStorybordsでしか使えないため)。上記以外に追加されたクラスの役割は次の通りです。詳細はソースコード内のコメント行を参照してください。

EAK7View」(G)のデモで使うGLKViewを継承したビュークラス
EAGLView」OpenGL ES 1.1や2.0で3D描画を行うためのビュークラス
Offscreen」テクスチャ画像を展開するためにメモリ領域を確保するクラス
Program」OpenGL ES 2.0でテキストからシェーダプログラムを作成するルーチン

【ご注意】サンプルソースコードの使用権利はフリーです。使えるようであれば、ご自身のソースファイルへコピー&ペースしてご利用ください。ただし、その結果として発生した事象に対しては責任は負いかねますのでご了承ください。