OpenGL ESテンプレート(6)~GLFunViewControllerクラス(5)

2012. 02. 10
OpenGL ES 1.1の場合)

・投影変換

glMatrixModeで現在の行列を投影行列(GL_PROJECTION)にし、glLoadIdentityで単位行列による初期化を行います。

・モデルビュー変換

同様にglMatrixModeで現在の行列をモデルビュー行列(GL_MODELVIEW)にし、glLoadIdentityで単位行列による初期化を行います。

そして図形を上下に反復移動させるため、glTranslateでモデルビュー行列に変換行列を乗じます。

3つの引数はx、y、z座標を示しており、第一、第三引数が0.0fなので第二引数のy座標に対してのみ移動することになります。

y座標の移動は式『sinf(transY) / 2.0f』となっていますが、引数transYはラジアンを表すことと、『/ 2.0f』はsinf( )の引数ではなくsinf( )の計算後に適用される点に注意してください。

つまり下表に示すようにtransYが(π / 2)の奇数倍の時に最大振幅(0.5または-0.5)になります。

transY y座標 
0.0f 0.0f 
π / 2 = 1.5707 ... f 0.5f 
π = 3.1415 ... f 0.0f 
 3π / 2 = 4.7123 ... f -0.5f 
2π = 6.2831 ... f 0.0f 

transYはOpenGL ES 2.0と同じく、次回のdrawFrameメソッドの呼び出し(つまり次のアニメーションフレームの描画)のためにインクリメントしています。

・視点座標系について

ここまで読んで気付く方もいらっしゃるかもしれませんが、このテンプレートでは投影変換の際に射影変換も透視変換も行っておらず、ビューボリュームの指定を行っていません。

ASとか/座標系メモ』によると、デフォルトでは正規化デバイス座標系と同じくx、y共に-1.0~1.0となっているようです。

つまり、視点座標系と正規化デバイス座標系は(0, 0)を原点とし、xとy共に-1~1の領域を持つもののようです。

(-1, 1)y
(1, 1)
 

 (C)
 
(D) 
 
(-0.5, 0.33)   (0.5, 0.33)
 (0, 0) 
(-0.5, -0.33)   (0.5, -0.33)
 
 (A)
 
 (B) 
 
→ x
(-1, -1) (1, -1)

したがって、画面全体の領域を持つビューポートのデバイス座標系にビューポート変換を行うと、図形はx軸方向には同比率で拡大されますが、y軸方向には1.5倍に引き延ばされることになります。

(0, 480)y
(320, 480)
 

 (C)
 
(D) 
 
(80, 320)   (240, 320)
   
(80, 160)   (240, 160)
 
 (A)
 
 (B) 
 
→ x
(0, 0) (320, 0)

これにより、元の頂点座標は幅1.0×高さ0.66であった横長の矩形が、ビューに表示される際には一辺80ピクセルの正方形になります。

図形の上下移動に関しても、高さ-1~1の視点座標系において-0.5~0.5の振幅なので、画面上では図形の中心が(160, 120)から(160, 360)の間で移動することになります。

・頂点座標配列の設定と有効化

glVertexPointerで頂点座標配列squareVerticesを指定し、glEnableClientStateで頂点座標配列を有効にします。

・頂点色配列の設定と有効化

glColorPointerで頂点色配列squareColorsを指定し、glEnableClientStateで頂点色配列を有効にします。

glTranslate

現在の行列に変換行列を乗じます。

void glTranslatef(GLfloat x, GLfloat y, GLfloat z);

void glTranslatex(GLfixed x, GLfixed y, GLfixed z);

glTranslateは、(xyz)によって変換を生成します。

現在の行列(glMatrixMode参照)はこの変換行列によって乗ぜられ、結果は現在の行列に置換されます。

glMultiMatrixを以下の行列を引数として呼び出すのと同様になります。

7747

行列モードがGL_MODELVIEWまたはGL_PROJECTIONのどちらかの場合、glTranslateを呼び出した後に描画される全てのオブジェクトが変換されます。

変換前の座標系の保存と復元には、glPushMatrixとglPopMatrixを使用してください。

xyz:変換ベクトルのx、y、z座標を指定します。

glColorPointer

色の配列を定義します。

void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);

glColorPointerは、レンダリング時に使用する色要素の配列の場所とデータを指定します。

sizeは色ごとの要素数を指定し、4である必要があります。

typeは各色要素のデータ型を指定し、strideはある色から次の属性へのバイトストライドを指定しており、頂点と属性を単一の配列内にまとめたり、別々の配列に格納することができます。
(単一の配列ストレージは、いくつかの実装でより効率的な場合があります)

色配列が指定されている場合、sizetypestride、そしてpointerはクライアント側の状態として保存されます。

色配列が有効な場合、glDrawArraysまたはglDrawElementsが呼び出された時に使用されます。

色配列の有効/無効は、glEnableClientStateglDisableClientStateを引数GL_COLOR_ARRAYで呼び出します。

色配列は初期状態が無効で、glDrawArraysやglDrawElementsを呼び出した時にアクセスすることはできません。

予め指定された頂点と頂点属性配列から(全てが同型の)プリミティブのシーケンスを構築するには、glDrawArraysを使用してください。

インデックスされた頂点と頂点属性でプリミティブのシーケンスを構築する場合は、glDrawElementsを使用してください。

glColorPointerは、通常クライアント側で実装します。

sizeが4でない場合、GL_INVALID_VALUEが発生します。

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

strideが負の場合、GL_INVALID_VALUEが発生します。

size:色ごとの要素数を指定します。
4である必要があります。
初期値は4です。

type:配列内の各色要素のデータ型を指定します。
シンボリック定数はGL_UNSIGNED_BYTEとGL_FIXEDが有効です。
ただし初期値はGL_FLOATです。
一般的なプロファイルは、シンボリック定数GL_FLOATも受け付けます。

stride:連続した色間のバイトオフセットを指定します。
strideが0の場合、色は配列内で隙間無く格納されていると解釈されます。
初期値は0です。

pointer:配列内の最初の色成分の最初の要素へのポインタを指定します。

プリミティブのレンダリング)

OpenGL ES 1.1と2.0用のそれぞれで設定した、プリミティブを形成する頂点座標配列と頂点色配列を使用し、glDrawArraysで矩形プリミティブを作成します。

プリミティブはGL_TRIANGLE_STRIPなので、上記の図でいうと三角形(A)-(B)-(C)と(B)-(C)-(D)が繋がった矩形を形成します。

7757

プリミティブの色は、基本となる三角形単位で各頂点で指定した色を線形補間しています。

したがって頂点座標配列と頂点色配列の順序を(A)-(B)-(C)-(D)から(B)-(A)-(D)-(C)になるように入れ替えると、三角形(B)-(A)-(D)と(A)-(D)-(C)が繋がった矩形になるため、各頂点色が同じであるにも関わらず異なる補間色になります。

7758

presentFramebufferメソッドの呼び出し)

EAGLViewクラスのpresentFramebufferメソッドを呼び出し、色レンダバッファのコンテンツを出力します。


15)didReceiveMemoryWarningメソッド

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.

}

didReceiveMemoryWarningメソッドは、アプリケーションがメモリ警告を受け取った時にビューコントローラに送信します。

スーパービューが無い場合はビューを解放します。

使用されていないキャッシュデータや画像などがあれば解放します。

デフォルトではスーパークラスによる初期化をしているだけで、何も処理していません。



参考文献

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

OpenGL ES 1.1 Reference Pages

ASとか/座標系メモ






bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
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

bose_soundsport_free
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