OpenGL ES 系列之开篇

OpenGL ES 系列之开篇

很久前一直想研究 OpenGL 无奈自己的惰性,现在准备开始完整的学习下 OpenGL, 一来工作需要,二来也是自我学习的成长。 我是一名 iOSer,OpenGL 是与平台无关的一种开发技术,虽然苹果在 iOS 12 推荐使用自家的 Metal, 但这个做为学习还是有必要的。

关于 OpenGL

OpenGL 全称:Open Graphics Library,用来处理2D、3D视觉数据的。是一个多用途的开放标准图形库,支持2D、3D数字内容的创建、机械和建筑设计、虚拟样机、飞行模拟、视频游戏等应用程序。你可以使用 OpenGL 配置3D图形的管道并提交数据。对顶点进行转换和点亮、组装成基本类型并进行栅格化以创建2D图像。OpenGL设计用来将函数调用转换成可以发送到底层图形硬件的图形命令。因为这个底层硬件专用于处理图形命令,所以 OpenGL 绘图通常非常快。

OpenGL ES 全称: OpenGL for Embedded System, 是OpenGL的一个精简版本,消除了冗余的功能,提供了一个简单学习和在手机图形硬件上轻松实现的库

简介

OpenGL ES 允许应用利用底层图形处理器的能力。iOS设备的GPU可以执行复杂的2D、3D绘制,与在最终的图片上每个像素点的复杂阴影计算。如果应用的设计需求需要最直接和全面访问GPU硬件,那最好要使用OpenGL ES。最典型的应用是视频游戏和呈现3D图形模拟。

OpenGL ES 是底层的、面向硬件的API。虽然提供了最强大的和最灵活的图形处理工具,但它的学习也是很困难且对你的应用程序整体设计也有重大的影响。对于需要高性能处理图形的应用, iOS提供了高层级的框架, 如 SpritKit(为2D游戏提供硬件加速动画的优化)、Core Image(提供对静态和视频图像的实时过滤和分析)、 CoreAnimation(提供图形渲染硬件加速和是所有iOS应用的动画基础,同时也是简单的声明式编程模型使得实现复杂的用户界面动画变得简单)

因为OpenGL ES 是基于 C 语言的 API,因此它具有极大的可移植性和广泛的支持。作为C语言API,与 Objective-C Cocoa 应用无缝衔接。OpenGL ES规范没有定义窗口层,所以宿主系统必须提供函数来创建OpenGL ES渲染上下文(用来接收命令)和 framebuffer(将绘制命令的结果写入其中)。在 iOS 中使用 OpenGL ES 需要使用 iOS 类设置和呈现绘图平面和使用平台无关的 API 来呈现内容。

GLKit 提供绘图平面和动画支持。神视图和视图控制器定义在 UIKit 中, 在 iOS 中控制视觉内容的呈现。 GLKit 为 OpenGL ES 提供了类似的这些类。当开发一个 OpenGL ES 应用, 你要使用 GLKView 对象渲染你的 OpenGL ES 内容。 你也要使用 GLKViewController 对象管理你的视图和内容动画的支持。

除了绘制内容填充整个屏幕或视图的一部分,你可以使用 OpenGL ES 的 framebuffer 对象对其它的渲染策略。 iOS 实现了标准的 OpenGL ES framebuffer 对象,可以渲染离屏缓存区或者 OpenGL ES 场景中其它使用纹理的地方。此外, OpenGL ES 在 iOS 上支持渲染到 Core Animation 图层(CAEAGLLayer),可以结合其它图层创建应用的界面或视觉展示。

图形处理器是为优化图形处理的并行设备。为了在应用中获得更好的性能,你必须仔细设计应用,给 OpenGL ES 提供数据和命令,那样图形硬件才能很好的并行运行在你的应用中。一个调差的应用让CPU或GPU去等待另一个处理命令的结束。

应用运行在后台时 可能不会调用 OpenGL ES 函数。如果应用在后台访问图形处理器, iOS 系统会自动中断。为了避免此种情况发生,你的应用在进入后台前要刷新任何在先前提交给 OpenGL ES 的尾部命令,避免在回到前台时调用 OpenGL ES。

利用迸发来设计应用程序对提高应用的性能非常有帮助。如果你想给 OpenGL ES 添加迸发,你必须要保证不能同时被两个线程访问同一个上下文。

OpenGL ES 官方网址

原文地址:https://www.cnblogs.com/tzsh1007/p/12448625.html

时间: 2024-11-05 09:17:47

OpenGL ES 系列之开篇的相关文章

iOS开发-OpenGL ES入门教程1

http://www.jianshu.com/p/750fde1d8b6a 这里是一篇新手教程,环境是Xcode7+OpenGL ES 2.0,目标写一个OpenGL ES的hello world.OpenGL ES系列教程在这里.OpenGL ES系列教程的代码地址 你的star和fork是我的源动力,你的意见能让我走得更远. 核心思路 通过GLKit,尽量简单地实现把一张图片绘制到屏幕. 效果展示 具体细节 1.新建OpenGL ES上下文 - (void)setupConfig { //新

基于Cocos2d-x学习OpenGL ES 2.0系列——你的第一个三角形(1)

[本系列转自]http://cn.cocos2d-x.org/tutorial/lists?id=79 前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2d-x为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2d-x过程中,知其然,更知其所以然.本系列教程不会涉及非常底层的数学原理,同时也不会过多地提及OpenGL本身的一些细节知识.但是我会在每篇文章的最后给出一些参考链接,大家可以顺藤摸瓜,一举Get OpenGL这个新

OpenGL ES教程系列(经典合集)

为了搞透播放器的开发,花了些时间收集这些资料,虽然我已经搞定opengles渲染视频的内容,但是想玩玩opengles,往深里玩,图像处理这块是个好的方向,所以opengles是值得好好学的. OpenGL ES教程原创系列 2011-12-18[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 2011-12-17[iTyran原创]GLKit 矩阵变换:自转公转 2011-12-02[iTyran原创]Xcode创建的默认iOS OpenGL

Android OpenGL ES零基础系列(一):理解GLSurfaceView,GLSurfaceView.Render的基本用法

转载请注明出处 前言 OpenGL ES是OpenGL的一个子集,是针对手机.PDA和游戏主机等嵌入式设备而设计的.该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准. 因此OpenGL ES作为第三方库被应用在android中. 到目前为止,OpenGL ES已经发展有了3个版本,OpenGL ES 1.0 , OpenGL ES 2.0 , OpenGL ES 3.0.其中OpenGL ES 1.0 是以OpenGL 1.3

基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)

Cocos2d-x底层图形绘制是使用OpenGL ES协议的.OpenGL ES是什么呢? OpenGL ES(OpenGl for Embedded System)是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准.OpenGL ES是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.Cocos2d-x底层图形渲染使

基于Cocos2d-x学习OpenGL ES 2.0系列——使用VBO索引(4)

在上一篇文章中,我们介绍了uniform和模型-视图-投影变换,相信大家对于OpenGL ES 2.0应该有一点感觉了.在这篇文章中,我们不再画三角形了,改为画四边形.下篇教程,我们就可以画立方体了,到时候就是真3D了. 为什么三角形在OpenGL教程里面这么受欢迎呢?因为在OpenGL的世界里面,所有的几何体都可以用三角形组合出来.我们的四边形也一样,它可以用两个三角形组合出来. 你的第一个四边形 首先,因为OpenGL里面没有直接绘制四边形的命令的,所以我们需要画两个三角形来拼成一个四边形.

基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之LayerColor(8)

在前面文章中讲述了Cocos2d-x引擎OpenGL渲染准备Shader方面,本文主要讲解使用LayerColor来讲述OpenGL的渲染过程. 1.LayerColor对象创建 添加LayerColor元素到游戏中: autolayerColor = LayerColor::create(Color4B(255, 0, 0, 255), 100, 100); layerColor->setPosition(100,100); 下面是LayerColor::create方法: LayerColo

Android OpenGL ES零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader

前言 在前2篇文章中,我们都说到着色器,且在第二篇中正式说到,这着色器只能用在OpenGL ES2.x等可编程管道里面,而在OpenGL ES1.x是不能用的.但我们一直没有说这是为什么,两者有什么区别.那这篇我们就一起来学习下OpenGL ES中的渲染管道. 正文 管道,英文名叫Pipeline,相信用过FaceBook图片加载库的同学对这个管道并不陌生,因为SimpleImageDrawee里面也是用的管道来对图片进行的一个处理.由于其底层也是C,因此我可以大胆的猜想,FaceBook图片加

Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生

转载请注明出处 本文出自Hansion的博客 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计,主要用来开发3D图形应用 Android支持以下几个版本的OpenGL ES API: OpenGL ES 1.0和1.1      支持Android 1.0及更高版本 OpenGL ES 2.0               支持Android 2.2(API级别8)及更高版本 O