美文网首页
OpenGL ES 3.0 —— 1.简介和在Xcode搭建

OpenGL ES 3.0 —— 1.简介和在Xcode搭建

作者: lugic | 来源:发表于2018-02-01 23:47 被阅读479次

临近年底,把这一年用到的OpenGL ES(侧重于iOS)相关的技术做一个总结。为图连贯,故把之前的文章整合在了一起,从最基础开始讲起。

一、OpenGL ES简介

OpenGL(Open Graphics Library)API是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
注:OpenGL是Khronos Group开发维护的一个规范,本身不是API。
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。(OpenGL ES可以在iOS上实现2D和3D图形编程。)
在学习OpenGL的过程中可以了解到很多图形学基本概念。

OpenGL ES 1.0、2.0、3.0的区别:

OpenGL ES1.0:
针对固定管线硬件(fixed pipeline),通过它内建的functions来设置诸如灯光、vertexes(图形的顶点数)、颜色、camera等等的东西。

OpenGL ES2.0:
针对可编程管线硬件(programmable pipeline),需要自己动手编写任何功能。与此同时,2.0相比于1.0更具灵活性,功能也更强大。可以自定义顶点和像素计算,可以让表现方式更加准确。

OpenGL ES3.0:
OpenGL ES3.0扩展了OpenGL ES2.0,支持许多新的渲染技术、优化和显示质量改进,包括——引入了许多和纹理相关的新功能,对着色语言进行了重大更新和支持着色器新功能的API特性,引入了多种与几何形状规范和图元渲染控制相关的新功能,引入了新的缓冲区对象,增添了许多与屏幕外渲染到帧缓冲区对象相关的新功能。具体功能在后边的文章详细说明。(可能:))

OpenGL ES 3.0的向后兼容新

OpenGL ES 3.0向后兼容OpenGL ES 2.0,但由于3.0/2.0不支持1.x支持的固定功能管线,3.0/2.0不能向后兼容1.x。

EGL/EAGL

EGL是Khronos渲染API(如OpenGL ES)和原生窗口系统之间的接口(在iOS上则是EAGL),任何OpenGL ES应用程序都必须在开始渲染之前使用EGL执行如下任务:

  • 查询并初始化设备商可用的显示器
  • 创建渲染表面
  • 创建渲染上下文

OpenGL ES 3.0图形管线的各个阶段

OpenGL ES 3.0图形管线的各个阶段

二、在Xcode搭建OpenGL ES

创建一个iOS工程。


创建一个iOS工程

在Build Phases下选择Link Binary With Libraries,点击+,添加GLKit.framework。

添加GLKit.framework
ViewController.h文件
#import <GLKit/GLKit.h>。
将@interface ViewController : UIViewController修改为@interface ViewController : GLKViewController。

ViewController.m文件
#import <OpenGLES/ES3/glext.h>。
在viewDidLoad方法中添加代码

//初始化上下文
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if (!self.context) {
    NSLog(@"Failed to create ES context");
}
//设置渲染表面
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[self setupGL];

setupGL方法

- (void)setupGL {
  [EAGLContext setCurrentContext:self.context];
}

添加- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect方法
(实现GLKViewDelegate的Required方法)

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    glClearColor(0.5f, 0.5f, 0.5f, 1.0f); //设置清除颜色
    glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓冲区
}

此外,在Main.storyboard中将View Controller的View的Class设置为GLKView。


image.png
image.png

Run一下这个工程,最后得到下图效果。


效果图
注:部分内容出自OpenGL超级宝典(蓝宝书)。

相关文章

网友评论

      本文标题:OpenGL ES 3.0 —— 1.简介和在Xcode搭建

      本文链接:https://www.haomeiwen.com/subject/pysgmttx.html