OpenGL

OpenGL / OpenGL ES 下专业名词解析

2019-05-11  本文已影响389人  CC老师_HelloCoder

图形API简介

引言:
从2014年到2018年.苹果才完成了系统内部从OpenGL ES过度到Metal.直到WWDC 2018,Apple 宣布 iOS 12 将弃用 OpenGL / CL.

Apps built using OpenGL ES will continue to run in iOS 12, but Open GL ES is deprecated in iOS 12. Games and graphics-intensive apps that previously used OpenGL ES should now adopt Metal.

iOS 12.0

但值得注意的是:

  1. 首先苹果自身的系统迁移上是花费了4年时间做这样的筹备.
  2. 其次在没有推出Metal 苹果对于OpenGL ES是高度集成且配合相应图层和GLKit 来辅助开发者能快速使用OpenGL ES
  3. OpenGL ES的弃用,只是针对苹果内部系统底层API依赖而言,并不是想让iOS开发者从此不使用OpenGLES. OpenGL ES只是角色变成第三方.毕竟它的跨平台以及稳定,是很难让现有的开发放弃.而这2点Metal 目前很难给到
    4.最后,如果大家想要融入到项目组,而目前大多数类似百度地图,高德地图和音视频处理的项目组已经是非常庞大的项目了,暂时不会迁移到Metal.所以我们如果只会metal从实际场景中并不够.
    5.所以我们学习会从OpenGL->OpenGL ES->Metal

图形API目的是解决什么问题

简单来说就是实现图形的底层渲染.

比如在游戏开发中,对于游戏场景/游戏人物的渲染
比如在音视频开发中,对于视频解码后的数据渲染
比如在地图引擎,对于地图上的数据渲染
比如在动画中,实现动画的绘制
比如在视频处理中,对于视频加上滤镜效果
等等....

OpenGL 专业名词解析

类推到OpenGL 中来,可以这么理解:

  1. OpenGL可以记录自己的状态(如当前所使用的颜色、是否开启了混合功能等);
  2. OpenGL可以接收输入(当调用OpenGL函数的时候,实际上可以看成OpenGL在接收我们的输入),如我们调用glColor3f,则OpenGL接收到这个输入后会修改自己的“当前颜色”这个状态;
  3. OpenGL可以进入停止状态,不再接收输入。在程序退出前,OpenGL总会先停止工作的。

可以使用glColor*函数来选择一种颜色,以后绘制的所有物体都是这种颜色,除非再次使用glColor*函数重新设定。

可以使用glTexCoord*函数来设置一个纹理坐标,以后绘制的所有物体都是采用这种纹理坐标,除非再次使用glTexCoord*函数重新设置。

可以使用glBlendFunc函数来指定混合功能的源因子和目标因子,以后绘制的所有物体都是采用这个源因子和目标因子,除非再次使用glBlendFunc函数重新指定。

可以使用glLight*函数来指定光源的位置、颜色,以后绘制的所有物体都是采用这个光源的位置、颜色,除非再次使用glBlendFunc函数重新指定。

OpenGL是一个状态机,它保持自身的状态,除非用户输入一条命令让它改变状态

例如:

//获取是否深度测试/混合
glIsEnabled(GL_DEPTH_TEST);
glIsEnabled(GL_BLEND);

//开启深度测试/混合
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);

//关闭深度测试/混合
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

纹理可以理解为图片. 大家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真.而这里使用的图片,就是常说的纹理.但是在OpenGL,我们更加习惯叫纹理,而不是图片.

上一篇下一篇

猜你喜欢

热点阅读