GLFun(29)~OpenGL ESテンプレートの利用(4)

2012. 02. 21
●matrixクラスの追加

OpenGL ES Applicationテンプレートにおける投影変換はglLoadIdentityによる初期化のみで、正規化デバイス座標系と視点座標系で変化がありませんが、オリジナルのGLFunでは投影変換にglOrthoによる正射影行列を適用しています。
(『GLFun(4)~OpenGL ESへの対応と作業工程』参照)

しかしOpenGL ES 2.0ではglOrthoなどの行列変換関数は用意されていませんので、自前で変換行列を揃える必要があります。

ここではApple公式のサンプルコード『GLES2Sample』にあるmatrixクラス(拡大縮小、回転、平行移動、正射影、透視投影行列の関数群)を利用します。

サンプルコードGLES2Sampleをダウンロードし、Classesフォルダ内にあるmatrix.hとmatrix.cの2つのファイルをサンプルコード版のGLFunプロジェクトのClassesフォルダにコピーし、プロジェクトのOther Sources下に追加します。

そしてGLFunViewController.mでヘッダファイルmatrix.hをインポートします。

#import "UIColor-Random.h"

7800


●GLFunViewController.hヘッダファイルの編集

描画を行うGLFunViewControllerに、OpenGL ES 2.0を利用しているかどうかを示すプロパティuseOpenGLES2を追加します。

これはOpenGL ES 1.1のみに対応しているTexture2Dクラスのメソッドを、OpenGL ES 2.0でも利用できるようにするためのフラグとして独自に追加するものです。

(太字が追加した部分)

#import <UIKit/UIKit.h>

#import <OpenGLES/EAGL.h>

#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>

#import "Constants.h"

#import "Texture2D.h"

@interface GLFunViewController : UIViewController
{
    EAGLContext *context;
    GLuint program;

    UISegmentedControl *colorControl;

    CGPoint firstTouch;
    CGPoint lastTouch;
    UIColor *currentColor;
    BOOL useRandomColor;
    ShapeType shapeType;
    Texture2D *sprite;

    BOOL useOpenGLES2;
}

@property (nonatomic, retain) IBOutlet UISegmentedControl *colorControl;

@property CGPoint firstTouch;
@property CGPoint lastTouch;
@property (nonatomic, retain) UIColor *currentColor;
@property BOOL useRandomColor;
@property ShapeType shapeType;
@property (nonatomic, retain) Texture2D *sprite;

@property BOOL useOpenGLES2;

- (IBAction)changeColor:(id)sender;
- (IBAction)changeShape:(id)sender;

@end

7801


●GLFunViewController.mソースファイルの編集

1)uniformインデックスの追加

プログラマブルシェーダでのプリミティブの描画時に固定となる値を宣言します。
(太字が追加した部分)

// Uniform index.
enum {
    UNIFORM_COLOR,
    UNIFORM_PROJECTION_MATRIX,
    UNIFORM_TEXTURE_FLAG,
    UNIFORM_TEXTURE,

    NUM_UNIFORMS
};
GLint uniforms[NUM_UNIFORMS];

UNIFORM_COLOR図形の描画色
UNIFORM_PROJECTION_MATRIX正射影行列
UNIFORM_TEXTURE_FLAGテクスチャ使用の有無を示すフラグ
UNIFORM_TEXTUREテクスチャ画像

図形の描画色はテンプレートのように頂点ごとに異なるわけではなく単色なのでuniform値で渡します。

正射影行列はオリジナルのGLFunにおけるglOrthoと同じ行列を渡し、頂点シェーダプログラムで適用します。

テクスチャ使用の有無を示すフラグはフラグメントシェーダプログラムで、テクスチャを使用しない3種の図形の場合とテクスチャを使用する画像の描画の場合で異なる描画色の式を利用するため、その判別に使用します。

テクスチャ画像は画像データを保持し、テクスチャ使用時にフラグメントシェーダプログラムでの描画色の式で使用されます。


2)attributeインデックスの変更

プログラマブルシェーダでの頂点属性の値を宣言します。
(太字が修正した部分)

// Attribute index.
enum {
    ATTRIB_VERTEX,
    ATTRIB_TEXCOORD,
    NUM_ATTRIBUTES
};

テンプレートでは頂点ごとに異なる色が設定されていましたが、ここではプリミティブ全体を単色で塗りつぶすので色はuniform値で指定することになり、ATTRIB_COLORは不要になります。

その代わりテクスチャを貼り付ける為に、頂点座標に対応するテクスチャ座標を示すATTRIB_TEXCOORDを追加しています。


3)useOpenGLES2プロパティの実装

Texture2DクラスのメソッドをOpenGL ES 2.0に対応させるにあたって、メソッド内部でのOpenGL ES 1.1と2.0の分岐に使用するフラグとして、プロパティuseOpenGLES2を実装します。

(太字が追加した部分)

@synthesize context;

@synthesize colorControl;

@synthesize firstTouch;
@synthesize lastTouch;
@synthesize currentColor;
@synthesize useRandomColor;
@synthesize shapeType;
@synthesize sprite;

@synthesize useOpenGLES2;

7802



参考文献

Apple/GLES2Sample

はじめての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 他

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
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 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

Lifestyle 650 home entertainment system
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