OpenGL ESを使用したiOS用3Dグラフィックス(1)

2011. 12. 05
iOSでOpenGL ESを使用するにあたって、参考になるApple公式のセッションビデオを紹介します。
(残念ながら英語のヒアリングができないので、スライドの和訳を掲載します)

今回は『iPhone Development Foundation Videos』の『Session 708 - 3D Graphics for iPhone using OpenGL ES』を紹介します。

7621


●入手方法

まず『iOS Dev Center』にログインします。

7615

そして『Resources for iOS5』の欄にある『Getting Started Videos』をクリックします。

7616

すると『iOS Development Videos』という、iOSアプリケーション開発者向けのビデオのページに行きます。

ここでは『Essentials(基本的な)』と『Advanced(高等の)』の2つのカテゴリに分けられたビデオのプレビューをブラウザ上で見ることができます。

全編を見るには『Introduction to the iPhone SDK』欄にある『Download full version on iTunes』をクリックし、iTunesでダウンロードする必要があります。

7617

『Download full version on iTunes』をクリックすると、iTunesの『iTunes Store』で『Essential Videos』が開きます。

『Advanced』や今回紹介する『Foundation』のビデオを入手したい場合は、欄の上部にある『Developer on iTunes > iPhone Development Resources > Foundation Videos - Videos』の中央にある『iPhone Development Resources』をクリックします。

7618

するとAppleがiOSの開発者向けに公開しているビデオのトップページに行きます。

下欄にある4つのカテゴリから『Foundation Videos』を選択します。

7619

『Foundation Videos』には57個のビデオと、そのビデオで使用されているスライドのPDFファイルがあります。

デフォルトでは『Videos』のタブが開かれていますので、スライドを入手したい場合は『Slides』タブを選択してください。

アイコンの右側にある『GET TRACKS』ボタンをクリックすると、57個のビデオまたはスライドをまとめてダウンロードリストに追加することができます。
(全てダウンロードした場合、ビデオが28GB、スライドのPDFファイルが635MBほどありますので、ダウンロード時間とHDDの空き容量に注意してください)

個別にファイルをダウンロードする場合は、それぞれの項目の右端にある『入手』ボタンをクリックすると、個々にダウンロードリストに追加されます。

ここで注意すべき点は、ダウンロード済であっても『入手』ボタンに変化が無いことです。

既にダウンロード済あるいはダウンロード中でも、『入手』ボタンをクリックするとダウンロードリストに追加される上、同じファイルが上書きされること無く重複して存在することになります。

ダウンロードしたファイルは、『ライブラリ』の『iTunes U』で見ることができます。
(スライドのPDFファイルはiTunesではなくプレビューで開きます)

7620

ここで表示されるリストはダウンロードが完了した順番のようで、しかもタイトルでソートできないので、個別にダウンロードする際には重複しないように気をつけてください。

必要な場合はFinderで『(ユーザ名)/ミュージック/iTunes/iTunes Media/iTunes U』フォルダで直接確認する方法もあります。

今回紹介するのは『Foundation Videos』の『Session 708 - 3D Graphics for iPhone using OpenGL ES』で、ビデオは296.8MB、スライドは2.8MBあります。


●OpenGL ESを使用したiPhone用3Dグラフィックス(3D Graphics for iPhone using OpenGL ES)

注:このビデオは(iPhone SDK 2.0およびiPhone 3Gが発表された)WWDC 2008で行われたセッションのため、iPhone 3GS以降に採用されたPowerVR SGXおよびOpenGL ES 2.0に関する話はありません。

7622 議題

・OpenGL ESの概要
 ・iPhone OS上でのOpenGL ESの使用法
 ・EAGLとCore Animation
 ・iPhone simulator上でのOpenGL ES
 ・ベストプラクティスと制限事項

7623 前提とする予備知識

・基本的な3Dグラフィックス
・OpenGL 1.5および拡張
・CocoaおよびObjective-C *
・Core AnimationおよびUIKit *

(* ほんの少し)


●OpenGL ESの概要

7624 OpenGL ES 1.1
概要

・OpenGL 1.5のサブセット
・オープンな業界標準
・組込みデバイスがターゲット
 ・電話、PDA(Personal Digital Assistant)、PMP(Portable
  Multimedia Player)、セットトップ、GPSユニット等
・ハードウェアアクセラレーションされた3Dレンダリングをサポート
 ・『固定機能』の頂点およびピクセル処理

7625  OpenGL ES 1.1
APIの設計目標

・『より小さな』実装向けに設計
・デスクトップと比較して、組込みデバイスの制約に対応
 ・限定された電力供給
 ・少ないメモリ
 ・少ないメモリの帯域幅
 ・低速クロック
・OpenGL APIの時代遅れまたは助長な部分の削除
・ソフトウェアの代替を必要としない
 ・アプリケーションはグラフィックスがアクセラレーション
  されるものとみなすことができる

7626  OpenGL ES
従来の3Dパイプラインを使用

ジオメトリ処理
ラスタライズ
テクスチャリング
フラグメント処理
フレームバッファ操作

7627  OpenGL 1.5との比較
ジオメトリ処理

サポート削除
・頂点配列
・バッファオブジェクト
・行列スタック
・ビューポート
・深度の範囲
・頂点のライティング
・シェードモデル
 (フラット/スムース)
・ユーザ定義のクリップ面
・直接モード(glBegin/glEnd)
・エッジフラグ配列
・フォグ座標配列
・テクスチャ座標の生成
・色マテリアルのライティング

7628  OpenGL 1.5との比較
ラスタライズ

サポート削除
・点、線、三角形
・点と線のアンチ
 エイリアシング
・カリング
・ポリゴンオフセット
・ポイントスプライト
・四角形とポリゴン(多角形)のプリミティブ
・ピクセルの描画/コピー
・ビットマップ
・ラスタの位置
・破線
・ポリゴンモード

7629  OpenGL 1.5との比較
テクスチャリング

サポート削除
・2Dテクスチャ
・テクスチャ座標のラップモード
・圧縮テクスチャフォーマット
・TexSubImage、CopyTexImage
・マルチテクスチャ
・RGBA、RGB、L、LAフォーマット
・テクスチャMIN/MAGフィルタ
・自動ミップマップ生成
・テクスチャ環境の合成方程式
・セカンダリカラー
・1D、3D、キューブ
 マップのテクスチャ
・テクスチャクロスバー
・サイズ/パック内部
 フォーマット

7630  OpenGL 1.5との比較
フラグメント処理

サポート削除
・フォグ
・シザーテスト
・アルファテスト
・フレームバッファブレンディング
・論理演算
・ディザ
・深度テスト(オプション)
・ステンシルテスト(オプション)
・マルチサンプリング(オプション)
・いくつかのブレンド方程式

7631  OpenGL 1.5との比較
フレームバッファ操作とその他

サポート削除
・クリア
・ピクセルの読み込み
・ヒント
・状態の照会
・クライアントがパックした
 ピクセルフォーマット
・glFlushとglFinish
・倍精度のサポート
・push/popの属性
・イメージングのサブセット
・アキュムレーションバッファ
・インデックスカラーフォーマット
・いくつかのピクセルとテクスチャ
 フォーマット

7632  OpenGL ES 1.1
詳細について

Khronosウェブサイト

http://www.khronos.org/opengles/

仕様の差異

...registry/gles/specs/1.1/es_cm_spec_1.1.10.pdf

フル仕様

...registry/gles/specs/1.1/es_full_spec.1.1.10.pdf

7633  OpenGL ES 1.1
仕様の差異

7634  OpenGL ES 1.1
拡張機能

・OpenGL 1.5と同じメカニズム
・馴染みの命名と助詞法則
 ・ベンダー:APPLE、IMG、その他
 ・マルチベンダー:EXT
 ・Khronos:ARBとOES
・アプリケーションは使用する前に拡張機能を照会する必要がある
 ・glGetString(GL_EXTENSIONS)
 ・注:サポートは実装に依存

拡張子については寺西忠勝さんのサイトにある『OpenGL/OpenGL ES 拡張』に分かり易くまとめられています。

IMGは『Khronos OpenGL ES API Registry』の『GL_IMG_~』の説明を見ると、PowerVRのメーカであるImagination Technologiesの略称のようです。

公式の解説は『All About OpenGL Extensions』を参照してください。
(ARBはOpenGL Architecture Review Board、OESはOpenGL extension specificationの略となっています)

7635  サポートされているOpenGL ESの拡張機能

EXT_texture_filter_anisotropic
EXT_texture_lod_bias
IMG_read_format
IMG_texture_compression_pvrtc
IMG_texture_format_BGRA8888
OES_blend_subtract
OES_compressed_paletted_texture
OES_depth24
OES_draw_texture
OES_framebuffer_object
OES_mapbuffer
OES_matrix_palette
OES_point_size_array
OES_point_sprite
OES_read_format
OES_rgb8_rgba8
OES_texture_mirrored_repeat

『IMG_texture_format_BGRA8888』は『Khronos OpenGL ES API Registry』にありませんが、Imagination Technologiesによる拡張として『GL_EXT_texture_format_BGRA8888』がありますので、拡張子が変わったものと思われます。

7636  サポートされているOpenGL ESの拡張機能

OES_mapbuffer

OpenGL 1.5のコア機能で、OpenGL ES 1.1ではオプション機能

7637  サポートされているOpenGL ESの拡張機能

IMG_texture_compression_pvrtc

iPhone GPU用のネイティブなテクスチャの圧縮フォーマット

7638  サポートされているOpenGL ESの拡張機能

OES_framebuffer_object

全てのOpenGL ESのフレームバッファの設定は、フレームバッファ
オブジェクトで処理

7639  コードの比較

OpenGL 1.5からOpenGL ES 1.1

glVertexPointer(3, GL_FLOAT, 0, vtxPtr);
glEnableClientState(GL_VERTEX_ARRAY);
glLoadIdentity();
glRotatef(rx, ry, rz, 1.0);
glTranslatef(tx, ty, tz);
glScalef(x, y, z);
glColor4f(r, g, b, a);
glOrtho (l, r, b, t, n, f);
glDrawArrays(mode, first, count);

OpenGL 1.5

7640  コードの比較
OpenGL 1.5からOpenGL ES 1.1

glVertexPointer(3, GL_FLOAT, 0, vtxPtr);
glEnableClientState(GL_VERTEX_ARRAY);
glLoadIdentity();
glRotatef(rx, ry, rz, 1.0);
glTranslatef(tx, ty, tz);
glScalef(x, y, z);
glColor4f(r, g, b, a);
glOrthof(l, r, b, t, n, f);
glDrawArrays(mode, first, count);

OpenGL ES 1.1

7641  その他のコードの小変更

・いくつかのEXT拡張子がOESに
 ・例:OES_framebuffer_object
・必要なOpenGLからのコア機能のいくつかが、OpenGL ES
 ではオプションの拡張機能に
 ・例:OES_blend_subtract
・単精度と倍精度のルーチンを置き換え
 ・例:glClearColorがglClearColorfに

経緯は分かりませんがglClearColorfという関数はOpenGL ESにはなく、OpenGL ES 1.1ではfloat型の引数とする場合はglClearColor、int型の引数の場合はglClearColorxとあり、OpenGL ES 2.0の場合はint型は無くfloat型のglClearColorのみとなっています。
(データ型については『OpenGL ESのデータ型』を参照してください)


●iPhone OS上でのOpenGL ESの使用法

7642  iPhoneにおけるOpenGL ES

・OpenGL ES 1.1をフル実装
・iPhoneのユーザインターフェイスを備えた効率的な統合
 ・Core AnimationレイヤをOpenGL ESのサーフェスにできる
 ・合成機能において最も優遇される
・高機能な3Dレンダリングをサポート

7643  OpenGL ES
プラットフォームとネイティブのウィンドウシステムAPI

・OpenGL ES
 ・レンダリングと状態管理コマンドのみ定義
・プラットフォームAPI
 ・OpenGL ESのレンダリングコンテキストの生成と管理
 ・例:AGL、CGL、EGL、GLX
・ネイティブウィンドウシステムAPI
 ・サーフェスとディスプレイにレンダリングする
  コンテキストを管理
 ・例:Quartz、X-Windows

AGLApple Graphics Library):Carbonウィンドウ上でOpenGLを使用するためのAPI。

CGLCore OpenGL):Quartzウィンドウシステム上でOpenGLを使用するためのAPI。

EGLEmbedded-System Graphics Library):ネイティブなプラットフォームのウィンドウシステムとOpenGL ESやOpenVGといったKhronosのレンダリングAPI間のインターフェイス。

GLX(OpenGL Extension to the X Window System):XウィンドウシステムとOpenGLを接続するインターフェイス。

7644  OpenGL ES
プラットフォームとネイティブのウィンドウシステムAPI

・アプリケーション
 ・サーフェスの管理と表示
  → ネイティブウィンドウシステム
   → ディスプレイハードウェア
 ・コンテキストの管理
  → OpenGL ESプラットフォームAPI
   ←→ ネイティブウィンドウシステムと連携
 ・描画
  → OpenGL ES
   → グラフィックスハードウェア



参考文献

iOS OpenGL ESプログラミングガイド

T.Teranishi/OpenGL/OpenGL ES:extensions

Khronos OpenGL ES API Registry

All About OpenGL Extensions

Wikipedia/Apple Graphics Library

Wikipedia/Core OpenGL

Wikipedia/EGL(OpenGL)

Wikipedia/GLX






Bose SoundSport wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
02 | 2017/03 | 03
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
Recent Articles
iTunes


Swift
Categories
Tips
WACOM


Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
BOSE

Bose SoundSport wireless headphones
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
SQLite
OpenGL ES
Amazon


Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Profile

Author:水月杏香
永遠の初心者プログラマ。

QR Code
QR
Visitors