GLFun(8)~OpenGLES2DViewクラス(4)

2011. 12. 21
ビューポート変換、投影変換、モデルビュー変換)

続いて、2Dグラフィックス用の3つの座標変換(ビューポート変換と投影変換、そしてモデルビュー変換)を設定します。
(『GLFun(4)~OpenGL ESへの対応と作業工程』参照)

最初にglBindFramebufferでフレームバッファをバインドします。

次にOpenGL ESのコンテンツを出力画面のどの領域に描画するかをglViewportで設定します。

第一、第二引数はビューポート矩形の原点となる左下角の座標をx、yで指定し、第三、第四引数はビューポートの幅と高さを指定します。

一般的にOpenGL ESコンテンツはビューの全画面で表示することが多いので、原点座標は(0, 0)、サイズは前述のcreateFramebufferメソッドで取得したレンダバッファの幅と高さを指定します。

投影変換の設定は、まずglMatrixModeに引数GL_PROJECTIONを渡して以降の行列操作を投影変換用にし、glLoadIdentityで初期化(単位行列にリセット)した後、glOrthoで正射影行列を適用します。

glOrthoの6つの引数は、ワールド座標系におけるビューボリュームの座標を示すもので、第一引数からleft、right、bottom、top、near、farを指定します。

glViewportではint値を使用するためglGetRenderbufferParameterivでレンダバッファから取得したint値を利用していましたが、glOrthofはfloat値で指定するため、ビューのframeプロパティでCGRect構造体内にあるCGFloat型のwidthとheightを使用していると思われます。

続いてglMatrixModeに引数GL_MODELVIEWを渡し、以降の行列操作をモデルビュー変換用にしますが、実際にオブジェクトを生成・配置する部分はOpenGLES2DViewクラスでは行っていなく、継承するクラス(GLFunプロジェクトではGLFunViewクラス)が担うことになります。

glViewport

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);

ビューポートを設定します。

glViewportは、正規化デバイス座標系からウィンドウ座標系へと、xyのアフィン変換を指定します。

(xndynd)を正規化デバイス座標系とすると、ウィンドウ座標系(xwyw)は以下のように計算されます。

xw = (xnd + 1) * (width / 2) + x

yw = (ynd + 1) * (height / 2) + y

ビューポートの幅と高さは、実装に依存する範囲に暗黙的に固定されます。

この範囲の照会には、引数GL_MAX_VIEWPORT_DIMSでglGetを呼び出してください。

widthまたはheightが負の場合、GL_INVALID_VALUEが発生します。

xy:ビューポート矩形の左下角をピクセル単位で指定します。
初期値は(0, 0)です。

widthheight:ビューポートの幅と高さを指定します。
GLコンテキストが最初にサーフェス(例えばウィンドウ)にアタッチされている場合、widthheightはそのサーフェスの寸法に設定されます。

glMatrixMode

void glMatrixMode(GLenum mode);

現在の行列となる行列を指定します。

glMatrixModeは現在の行列モードを設定します。

modeは以下の値の内の一つを採ることができます。

GL_MODELVIEW
モデルビュー行列スタックに、後続の行列操作を適用します。

GL_PROJECTION
投影行列スタックに、後続の行列操作を適用します。

GL_TEXTURE
テクスチャ行列スタックに、後続の行列操作を適用します。

modeが有効な値でない場合、GL_INVALID_ENUMが発生します。

mode:行列スタックにその後の行列操作のためのターゲットを指定します。
GL_MODELVIEW、GL_PROJECTION、そしてGL_TEXTUREという値が使用できます。
初期値はGL_MODELVIEWです。

glLoadIdentity

void glLoadIdentity(void);

現在の行列と単位行列を置換します。

glLoadIdentityは、現在の行列と単位行列を置換します。

これは単位行列でglLoadMatrixを呼び出したのと同義ですが、場合によってはより効率的です。

7541

glOrtho

void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far);

void glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far);

正射影行列を現在の行列に乗じます。

glOrtho正射影(平行投影)を生成する変換を記述します。

これはglMultMatrixを以下の行列を引数として呼び出したものと同様に、現在の行列(glMatrixMode参照)はこの行列によって乗じられ、その結果が現在の行列に置換されます。

7542

7543

通常、行列モードはGL_PROJECTIONで、視点が(0, 0, 0)に配置されていると仮定して、ウィンドウの左下と右上角にマッピングされるように、手前のクリッピング面上の点にそれぞれ(leftbottom-near)と(righttop-near)を指定します。

奥のクリッピング面の位置は、-farを指定します。

nearfarの双方とも、正や負になる場合があります。

現在の行列スタックの保存と復元には、glPushMatrixとglPopMatrixを使用してください。

left = right、またはbottom = top、あるいはnear = farの場合はGL_INVALID_VALUEが発生します。

leftright:垂直クリッピング面の左右の座標を指定します。

bottomtop:水平クリッピング面の上下の座標を指定します。

nearfar:深度クリッピング面の手前と奥の距離を指定します。
クリッピング面がビューアより後方になる場合は、値が負になります。


背景色の設定と適用)

色レンダバッファのクリア色を指定し、背景として適用します。

クリアする色の設定はglClearColorで指定し、第一引数からred、green、blue、alphaとなっています。

その後glClearに引数GL_COLOR_BUFFER_BITを渡して呼び出すことで、色レンダバッファを指定色でクリアすることができます。

実際にはglBindRenderbufferでレンダバッファをバインドし、コンテキストに対しpresentRenderbuffer:メソッドで色レンダバッファを指定することで適用されます。

glClearColor

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

void glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);

カラーバッファのクリア値を指定します。

glClearColorは、glClearでカラーバッファをクリアする際に使用する、赤、緑、青、そしてアルファ値を指定します。

glClearColorが指定できる値は、[0, 1]の範囲に限定されています。

redgreenbluealpha:カラーバッファをクリアする時に使用する、赤、緑、青、そしてアルファ値を指定します。
初期値は全て0です。

glClear

void glClear(GLbitfield mask);

プリセット値にバッファをクリアします。

glClearは、glClearColor、glClearDepthf、そしてglClearStencilによって予め選択された値に、ウィンドウのビットプレーン空間を設定します。

ピクセル所有権テスト、シザーテスト、ディザリング、そしてバッファのホワイトマスクは、glClearの操作に影響を与えます。

シザーボックスはクリアされた領域を制限します。

アルファ関数、ブレンド関数、論理操作、ステンシル、テクスチャマッピング、そして深度バッファリングは、glClearによって無視されます。

glClearは、バッファをクリアすることを示すいくつかの値から、ORのビットマスクを1つ引数として選択します。

ビットマスクの値は以下の通りです。

GL_COLOR_BUFFER_BIT
カラーバッファを示します。

GL_DEPTH_BUFFER_BIT
深度バッファを示します。

GL_STENCIL_BUFFER_BIT
ステンシルバッファを示します。

各バッファがクリアされた時の値は、そのバッファのクリア値の設定に依存します。

バッファが存在しない場合、glClearはバッファに対して何も影響を与えません。

定義済の3つのビットマスク以外のビットマスクがmaskに設定された場合、GL_INVALID_VALUEが発生します。

mask:バッファをクリアすることを示す、ORのビットマスクを指定します。
有効なマスクはGL_COLOR_BUFFER_BIT、GL_DEPTH_BUFFER_BIT、そしてGL_STENCIL_BUFFER_BITです。

presentRenderbuffer:

- (BOOL)presentRenderbuffer:(NSUInteger)target

画面上にレンダバッファのコンテンツを表示します。

戻り値は成功した場合はYES、そうでない場合はNOになります。

レンダバッファを表示するには、renderbufferStorage:fromDrawable:メソッドを使用してストレージを割り当てておく必要があります。

厳密な意味で、いつ、どのようにレンダバッファのコンテンツを表示するかは、描画可能オブジェクトによって制御されます。

重要:レンダバッファのコンテンツは、レンダバッファが画面に表示された後で変更される場合があります。
レンダバッファを表示した後、アプリケーションは再度表示する前にレンダバッファのコンテンツを完全に再描画する必要があります。
レンダバッファのコンテンツを保持するには、drawableProperties辞書のkEAGLDrawablePropertyRetainedBackingキーをYESに設定することができます。
キーをYESに設定すると、グラフィックスのパフォーマンスが低下し、使用メモリが増加するため、レンダバッファのコンテンツを変えずに保持する時のみに行ってください。

target:現在バインドされているレンダバッファ用の、OpenGL ESのバインディングポイントを指定します。
OpenGL ES 1.0 APIを使用するコンテキストの場合は、GL_RENDERBUFFER_OESにする必要があります。
OpenGL ES 2.0 APIを使用するコンテキストの場合は、OES接尾辞を削除する必要があります。



参考文献

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

UIView Class Reference

EAGLContext Class Reference

OpenGL ES 1.1 Reference Pages

OpenGL ES 2.0 Reference Pages

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

Beginning Ios 6 Development: Exploring the Ios SdkBeginning Ios 6 Development: Exploring the Ios Sdk
(2012/12/26)
David Mark、Jack Nutting 他

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
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
Profile

水月杏香

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

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
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
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR