XCode4.3.2で確認
OpenGL ESプロジェクトのひな形を流用します。
下記のコードは最低限の手順しか書いていません。描画やモデルの準備は各々でお願いします。
AppViewController.m
// ビューポートの値を入れる
float viewport[4];
// 2D座標系矩形(512x512pxのテクスチャを
// 等倍で表示する前提
// こいつをTRIANGLE_STRIPで描画する
const GLfloat squareVertices2D[] = {
// 座標X, Y, Z, U, V
// 左回り
0.0f, 512.0f, 0.0f, 1.0f, // 左下
512.0f, 512.0f, 1.0f, 1.0f, // 右下
0.0f, 0.0f, 0.0f, 0.0f, // 左上
512.0f, 0.0f, 1.0f, 0.0f, // 右上
};
//
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2] autorelease];
// :
// viewport設定
viewport[0]=self.view.bounds.origin.x;
viewport[1]=self.view.bounds.origin.y;
viewport[2]=self.view.bounds.size.width;
viewport[3]=self.view.bounds.size.height;
[self setupGL];
}
// OpenGL ESのセットアップ
- (void)setupGL
{
// :
// :
[EAGLContext setCurrentContext:self.context];
// :
// :
glFrontFace(GL_CCW); // 左回りを表(これがOpenGLのデフォルト)
// :
// :
}
// 更新
- (void)update
{
// :
// :
// 2Dウィンドウ座標系(原点が左上 0,0 )の行列を作る
GLKMatrix4 tmpMatrix = GLKMatrix4MakeOrtho(viewport[0], viewport[2], viewport[1], viewport[3], -1024, 1024);
tmpMatrix = GLKMatrix4RotateX(tmpMatrix, GLKMathDegreesToRadians(180));
tmpMatrix = GLKMatrix4Translate (tmpMatrix, 0, -viewport[3], 0);
_modelViewProjectionMatrix = tmpMatrix; // これが2Dウィンドウ座標系の行列になります
// :
// :
}
// 描画
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// :
// 2Dウィンドウ座標で描画
// カリングをOFF(裏面も描く・重要)
glDisable(GL_CULL_FACE);
// :
// 頂点バッファの準備などをして下さい
// :
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// :
}