標籤:ios opengl es glkit
OpenGL ES簡介:
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式裝置而設計。該API由Khronos集團定義推廣,Khronos是一個圖形軟硬體行業協會,該協會主要關注圖形和多媒體方面的開放標準。
OpenGL ES 3.0主要新功能有:1、
渲染管線多重增強,實現先進視覺效果的加速,包括遮擋查詢(Occlusion Query)、變緩反饋(Transform Feedback)、執行個體渲染(Instanced Rendering)、四個或更多渲染目標支援。2、
高品質ETC2/EAC紋理壓縮格式成為一項標準功能,不同平台上不再需要需要不同的紋理集。3、
新版GLSL ES 3.0著色語言,全面支援整數和32位浮點操作。4、
紋理功能大幅增強,支援浮點紋理、3D紋理、深度紋理、頂點紋理、NPOT紋理、R/RG單雙通道紋理、不可變紋理、2D陣列紋理、無二次冪限制紋理、陰影對比、調配(swizzle)、LOD與mip level clamps、無縫立方體貼圖、採樣對象、紋理MSAA消除鋸齒渲染器。5、一
系列廣泛的精確尺寸紋理和渲染緩衝格式,便攜行動裝置 App更簡單。
而在iOS上,可以支援opengles3.0的最低環境是iphone5s ios7.0.
iOS下環境搭建:
關於ios下環境搭建有好幾種,最簡單的是在建立工程的時候選擇game模板,然後如所示:
不過,用這種方式,建立出來的工程有很多用不到的代碼,不利於我們one by one的學習,所以,我們就從最簡單的single view application工程說起,怎麼一步步去搭建opengl es環境。
首先,建立一個single view application工程,然後,引入GlKit和OpenGLES。
緊接著,在ViewController.h檔案裡引入GLKit/GLKit.h,將ViewController類的父類改成GLKViewController。
#import <UIKit/UIKit.h>#import <GLKit/GLKit.h>@interface ViewController : GLKViewController@end
然後將storyboard中ViewController所對應的view的Custom Class改成GLKView。
修改ViewController.m檔案,代碼如下:
#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
再次構建運行,如所示:
至此,一個初步的opengles3的開發環境已經搭建完畢,因為ios平台的特殊性,所以我們很多時候不得不藉助ios下glkit庫去實現和簡化我們的操作,不過,對於大部分opengles的內容,我還是會脫離glkit,原汁原味的道出,這樣,對於以後的跨平台是大有裨益的。
本文有不足之處,還望各位多多指正。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
iOS下OpenGL ES 3.0編程入門(一):構建Hello World環境