你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS 開發 OpenGL 新手入門

iOS 開發 OpenGL 新手入門

編輯:IOS開發基礎

1.jpg

寫在前頭,好久沒有更新博客,感謝老朋友的再次來訪,同時也歡迎新朋友~

說起OpenGL,相信大不多數朋友都不會陌生,或多或少都有接觸。本文不屬於OpenGL提高篇,主要目的在於幫助新手更快熟悉iOS中如何使用OpenGL,關於這方面的介紹,網上也有很多,本文主要任務在於整理,介紹稍有偏重。這裡有比較完整的Demo,可以協助大家更快上手

OpenGL版本

iOS系統默認支持OpenGl ES1.0、ES2.0以及ES3.0 3個版本,三者之間並不是簡單的版本升級,設計理念甚至完全不同,在開發OpenGL項目前,需要根據業務需求選擇合適的版本。這方面的介紹不少,不再展開。在學習OpenGL代碼的時候也需要知道它對應著哪個版本,在ES1中執行ES2代碼是看不到任何效果的,你可以在初始化EAGLContext時指定ES版本號

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

OpenGL坐標系

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

blob.png

除了方向,還有一點需要注意,默認情況各個方向坐標值范圍為(-1,1),而不是UIKit中的(0,320)。當繪制點(320,0),它並不會出現在屏幕右上角。在ES1中,可以通過以下代碼將坐標系轉化為熟悉的(320,480)

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    glViewport(0, 0, rect.size.width * 2, rect.size.height * 2);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrthof(0, 320, 0, 480, -1024, 1024);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

接下來說說iOS中如何使用OpenGL

GLKViewController & GLKView

機智的碼農是不是已經發現這兩個對象, 為了方便大家更快的開發,系統為OpenGL提供了簡單的封裝,繼承GLKViewController定義自己的ViewController,GLKViewController的view為GLKView類,GLKView的delegate定義了繪制回調函數

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect

GLKViewController定義數據刷新函數,當子類實現-(void)update方法,glkViewControllerUpdate方法將不再被調用

- (void)glkViewControllerUpdate:(GLKViewController *)controller

HJGLKViewControllerDemo模擬了GLKViewController方法實現,有興趣的童鞋可以查看GLKViewController內部實現機制。需要補充一點,默認情況下,GLKViewController渲染RunLoop並非NSRunLoopCommonModes,而是NSDefaultRunLoopMode,因此在UIKit中使用GLKViewController,當滑動界面時,OpenGL是不會渲染的,為了解決這個問題,可以使用HJGLKViewController替換GLKViewController,HJGLKViewController中默認渲染RunLoop使用NSRunLoopCommonModes模式

EAGLContext

在介紹選擇版本時已經提到EAGLContext,與UIKit中CGContextRef相似,EAGLContext相當於OpenGL繪制句柄或者上下文,在繪制試圖之前,需要指定使用創建的上下文繪制

[EAGLContext setCurrentContext:view.context];

當一個APP可能存在多個EAGLContext時,需要處理並存沖突等問題,比如大家所熟知的GPUImage,都會使用到EAGLContext。因此,在使用中要記得及時釋放。有興趣的朋友可以看看這篇文章

Draw

OpenGL繪制本文就不做介紹,HJGLKViewControllerDemo中有大量的示例,順便推薦幾篇相關文章

  1. 詳解第一個OpenGL程序

  2. 西蒙iPhone-OpenGL ES 中文教程專題

  3. Cocos2d源碼

小貼士:當App退到後台時, 切記暫停OpenGL繪制,否則可能導致crash


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved