iOS下OpenGL ES 3.0编程入门(一):构建Hello World环境

16 篇文章 0 订阅
2 篇文章 0 订阅

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、一 系列广泛的精确尺寸纹理和渲染缓冲格式,便携移动应用更简单。

     而在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。

[objc]  view plain  copy
  1. #import <UIKit/UIKit.h>  
  2. #import <GLKit/GLKit.h>  
  3. @interface ViewController : GLKViewController  
  4.   
  5.   
  6. @end  

     然后将storyboard中ViewController所对应的view的Custom Class改成GLKView。



     修改ViewController.m文件,代码如下:

[objc]  view plain  copy
  1. #import "ViewController.h"  
  2. #import <OpenGLES/ES3/gl.h>  
  3. #import <OpenGLES/ES3/glext.h>  
  4. @interface ViewController ()<GLKViewDelegate>  
  5. {  
  6.     EAGLContext *context; //EAGLContent是苹果在ios平台下实现的opengles渲染层,用于渲染结果在目标surface上的更新。  
  7.   
  8. }  
  9. @end  
  10.   
  11. @implementation ViewController  
  12.   
  13. - (void)viewDidLoad {  
  14.     [super viewDidLoad];  
  15.     context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];//这里用的是opengles3.  
  16.       
  17.     if (!context) {  
  18.         NSLog(@"Failed to create ES context");  
  19.     }  
  20.       
  21.     GLKView *view = (GLKView *)self.view;  
  22.     view.context = context;  
  23.     view.drawableDepthFormat = GLKViewDrawableDepthFormat24;  
  24.     [EAGLContext setCurrentContext:context];  
  25.     glEnable(GL_DEPTH_TEST); //开启深度测试,就是让离你近的物体可以遮挡离你远的物体。  
  26.     glClearColor(0.10.20.31); //设置surface的清除颜色,也就是渲染到屏幕上的背景色。  
  27. }  
  28.   
  29. - (BOOL)prefersStatusBarHidden {  
  30.     return YES;  
  31. }  
  32.   
  33. -(void)glkView:(GLKView *)view drawInRect:(CGRect)rect  
  34. {  
  35.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  //清除surface内容,恢复至初始状态。  
  36. }  
  37. @end  

     再次构建运行,如下图所示:



     至此,一个初步的opengles3的开发环境已经搭建完毕,因为ios平台的特殊性,所以我们很多时候不得不借助ios下glkit库去实现和简化我们的操作,不过,对于大部分opengles的内容,我还是会脱离glkit,原汁原味的道出,这样,对于以后的跨平台是大有裨益的。

     本文有不足之处,还望各位多多指正。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值