OpenGL開發入門

有稜角的圓發表於2016-07-09

1.OpenGL簡介:

       OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式裝置而設計。該API由Khronos集團定義推廣,Khronos是一個圖形軟硬體行業協會,該協會主要關注圖形和多媒體方面的開放標準。

         iOS系統預設支援OpenGl ES1.0、ES2.0以及ES3.0 3個版本,三者之間並不是簡單的版本升級,設計理念甚至完全不同,在開發OpenGL專案前,需要根據業務需求選擇合適的版本。而在iOS上,可以支援opengles3.0的最低環境是iphone5s ios7.0.

初始化EAGLContext時指定ES版本號:

                                                    

EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];

 

OpenGL座標系

OpenGL座標系不同於UIKit座標系,其實它是這樣的:

除了方向,還有一點需要注意,預設情況各個方向座標值範圍為(-1,1),而不是UIKit中的(0,320)。當繪製點(320,0),它並不會出現在螢幕右上角。

2.iOS環境下OpenGL環境搭建:

首先,建立一個single view application工程,然後,引入GlKit和OpenGLES。

 

 

緊接著,在ViewController.h檔案裡引入GLKit/GLKit.h,將ViewController類的父類改成GLKViewController。

 


#import <UIKit/UIKit.h>

#import <GLKit/GLKit.h>

@interface ViewController : GLKViewController<GLKViewDelegate>

@end

 

修改viewController中的程式碼如下:

 

#import "ViewController.h"
#import <OpenGLES/ES3/gl.h>
#import <OpenGLES/ES3/glext.h>
@interface ViewController ()<GLKViewDelegate>
{
    EAGLContext *context; //EAGLContent是蘋果在ios平臺下實現的opengles渲染層,用於渲染結果在目標surface上的更新。

}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];//這裡用的是opengles3.
    
    if (!context) {
        NSLog(@"Failed to create ES context");
    }
    
    GLKView *view = (GLKView *)self.view;
    view.context = context;
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
    [EAGLContext setCurrentContext:context];
    glEnable(GL_DEPTH_TEST); //開啟深度測試,就是讓離你近的物體可以遮擋離你遠的物體。
    glClearColor(0.1, 0.2, 0.3, 1); //設定surface的清除顏色,也就是渲染到螢幕上的背景色。
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  //清除surface內容,恢復至初始狀態。
}
@end

 


     再次構建執行,如下圖所示:

 參考文獻:

               http://www.cocoachina.com/ios/20151123/14116.html

               http://blog.csdn.net/sx1989827/article/details/47304971

相關文章