iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境

OpenGL版本

iOS系统默认支持OpenGl ES1.0、ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适的版本。这方面的介绍不少,不再展开。在学习OpenGL代码的时候也需要知道它对应着哪个版本,在ES1中执行ES2代码是看不到任何效果的,你可以在初始化EAGLContext时指定ES版本号

 _eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

OpenGL坐标系不同于UIKit坐标系,其实它是这样的,(-1,-1)是屏幕左下角,(1,1)是屏幕右上角

现在我们从创建工程开始

我们可以在创建工程的时候直接选择game模板,这样系统会自动配置好环境,但是会有很多的多余代码。

为了方便学习,我们选择创建一个single view application工程。

创建好工程之后要引入openGLES框架。

苹果提供了一系列的API,简化了对openGL的使用,这些组件被包含在GLKit.framework中。

为了更好地了解openGL的使用,在这里我们不适用GLKit相关的API,以后可能会有相关的介绍。

接下来就可以开始使用openGL了,这里新实现一个类,继承自UIView。

导入对应版本的头文件

  

#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>

设置属性


1

2

3

4

5

6

7

8

9

10

11

12

13

14

@interface MTGLESViewController (){

    EAGLContext *_context;

    CAEAGLLayer *_EALayer;

    GLuint _colorBufferRender;

    GLuint _frameBuffer;

    GLuint _glProgram;

    GLuint _positionSlot;

    GLuint _textureSlot;

    GLuint _textureCoordsSlot;

    GLuint _textureID;

    CGRect _frameCAEAGLLayer;

    

}

在IOS应用程序中,每个线程都会维护一个当前上下文。当你的应用程序使用Opengl ES的调用时,线程的上下文就会被那个调用改变。

要设置当前上下文,你可以通过调用EAGLContext类的setCurrentContext:方法。

[EAGLContext setCurrentContext:myContext];

你的应用程序也可以通过EAGLContext类的currentContext方法来获取一个线程的当前上下文。

当你的应用程序设置了一个新的上下文时,EAGL会释放先前的上下文,并且获取新的上下文。

当你的应用程序创建和初始化EAGLContext对象时,可以来决定那种版本的Opengl ES会被支持。创建Opengl ES 2.0上下文时,你的应用程序可以如下初始化:

_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:_eaglContext];

初始化完之后,我们需要对layer层进行一些处理,设置一些属性,使其能够使用openGL。

_eaglLayer = (CAEAGLLayer*)self.layer;_eaglLayer.frame = self.frame;_eaglLayer.opaque = YES;
_eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],kEAGLDrawablePropertyRetainedBacking,                    kEAGLColorFormatRGBA8,kEAGLDrawablePropertyColorFormat, nil];

初始化完成Layer之后,我们需要初始化一下renderBuffer和FrameBuffer

 glGenRenderbuffers(1, &_colorBufferRender);
    glBindRenderbuffer(GL_RENDERBUFFER, _colorBufferRender);
    [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_EALayer];

    glGenFramebuffers(1, &_frameBuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                              GL_COLOR_ATTACHMENT0,
                              GL_RENDERBUFFER,
                              _colorBufferRender);

现在试试我们是否能正常使用openGL

glClearColor(0.5f, 0.5f, 0.5f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

[_eaglContext presentRenderbuffer:GL_RENDERBUFFER];

屏幕的背景色被设为为灰色,证明我们已经成功完成了掌握openGL的第一关键点。

时间: 2024-10-10 00:28:34

iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境的相关文章

java攻城师之路(Android篇)--搭建开发环境、拨打电话、发送短信、布局例子

一.搭建开发环境 1.所需资源 JDK6以上 Eclipse3.6以上 SDK17, 2.3.3 ADT17 2.安装注意事项 不要使用中文路径 如果模拟器默认路径包含中文, 可以设置android_sdk_home环境变量解决.效果如下: 二.拨打电话 1.步骤 在Button节点中添加onClick属性, 指定一个方法名 在Activity中定义一个public void 方法名 (View view) 获取文本框中的号码 创建意图, 设置动作, 设置数据 使用意图开启Activity 2.

看 opengl 写代码(1) 搭建开发环境(vs2012 + glut)

博主 无私奉献:(vs2012 + glut) 开发 环境 配置 序:看到本文章,祝贺你,你至少省掉了 1 个小时 苦苦寻找 搭建 方法的时间. 下面搭建方法为本博主 亲测.有事 可以 留言 或者 私密我. 1.从我的网盘里 下载 glut http://pan.baidu.com/s/1dDGYnp3 2.下载完 以后 ,会 有 5个 文件 和 一个 说明 txt 具体 操作 如下: 32位Windows环境下安装GLUT的步骤 1.将glut.h复制到C:\Program Files (x8

[iOS越狱开发]用theos和iOSOpenDev搭建开发环境

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 越狱开发方法很多,很多比较繁琐,TheOS的出现,可以说是逆天了. TheOS被设计为一个在基于Unix平台(Mac OS X.IOS…)和大多数的Linux平台下开发IOS程序的集成开发环境.说是集成开发环境,其实就是给我们准备好了一些代码模板.预置一些基本的Makefile脚本,我们还是要在Terminal中完成一些关键操作 而iOSOpenDev则集成到xcode里,基于TheOS的开发,编译更方便,不用自己写Mak

OpenGL ES编程入门资源集合

OpenGL ES 2.0中文手册:http://www.dreamingwish.com/articlelist/category/opengl-es-api 里边讲解了部分API的功能,作为基本的参考. OpenGL ES2.0 渲染管线:http://codingnow.cn/opengles/1504.html OpenGL ES2.0 绘制三角形:http://codingnow.cn/opengles/1514.html 一个OpenGL ES2.0的例子:http://blog.c

iOS开发网络篇—搭建本地服务器

iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache-tomcat-6.0.41.tar eclipse-jee-kepler-SR2-macosx-cocoa-x86_64.tar.gz jdk-8u5-macosx-x64.dmg 二.安装和配置本地服务器环境(java)步骤: (1)在文档路径下,新建一个文件夹(NetWord),解压eclips

[转载]ios入门篇 -hello Word(1)

温馨提示:,如果您使用移动终端阅读本篇文章,请连接wifi的情况下阅读,里面有大量图片,以免造成您不必要的损失. 潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的. 博主介绍 2010 入园博客园学习.net,只是为后面做.net开发做铺垫. 2011-2012年 2年一直做.net开发(一直处于打杂状态),由于一直打杂状态,萌发转行做ios的状态. 2013-至今 做过4-5个ios方面的app(现阶段处于打杂状态).一直想做转行

ios入门篇 -hello Word(1)

温馨提示:,如果您使用移动终端阅读本篇文章,请连接wifi的情况下阅读,里面有大量图片,以免造成您不必要的损失. 潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的. 博主介绍   2010 入园博客园学习.net,只是为后面做.net开发做铺垫.   2011-2012年 2年一直做.net开发(一直处于打杂状态),由于一直打杂状态,萌发转行做ios的状态.   2013-至今 做过4-5个ios方面的app(现阶段处于打杂状态).

(转)OpenGL ES编程入门资源集合

出自:http://blog.csdn.net/u013467442/article/details/44498125 OpenGL ES 2.0中文手册:http://www.dreamingwish.com/articlelist/category/opengl-es-api 里边讲解了部分API的功能,作为基本的参考. OpenGL ES2.0 渲染管线:http://codingnow.cn/opengles/1504.html OpenGL ES2.0 绘制三角形:http://cod

iOS 即时通讯,从入门到 “放弃”?

原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. —— 由宇朋Look分享 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo:iOS即时通讯,从入门到“放弃”?(demo)可以打开项目先预览效果,对照着进行阅读. 言归正传,首先我们来总