目前比较常用的图形渲染API有如下几种:

  • Direct3D
  • OpenGL
  • Vulkan
  • Metal

下面会详细的介绍各种API的特点

Direct3D

Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,是DirectX的一部分,目前广为各家显示卡所支援。与OpenGL同为电脑绘图软体和电脑游戏最常使用的两套绘图编程接口之一,目前只在Windows平台上可用。

OpenGL(Open Graphics Library)

OpenGL(开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。

OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。

OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。

OpenGL ES(OpenGL for Embedded Systems)

OpenGL ES是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。现在主要有两个版本,OpenGLES1.x提供固定管道渲染,OpenGLES2.x及以上提供可编程管道渲染。目前的手机大多支持OpenGLES2.0及其以上版本。OpenGL ES相对OpenGL删减了一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性。

OpenGL- ES 是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,主要针对多种嵌入式系统专门设计 - 包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。OpenGL ES 包含浮点运算和定点运算系统描述以及 EGL针对便携设备的本地视窗系统规范。OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。OpenGL ES-SC 专为有高安全性需求的特殊市场精心打造。

WebGL(Web Graphics Library)

WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。

WebGL 是以 OpenGL ES 2.0 为蓝本设计的,而不是纯的OpenGL ES。WebGL通过 HTML5 的 Canvas 来和 DOM 打交道。因此也和 OpenGL ES 2.0 一样,使用 GLSL 作为 Shading Language (一种 C-Like 顶点计算和着色的语言,缓存编译到 GPU,由 GPU 来执行)。WebGL 2.0基于OpenGL ES 3.0,确保了提供许多选择性的WebGL 1.0扩展,并引入新的API。

WebGL、OpenGL和OpenGL ES三者的关系

通过上述分析,可以得出如下关系:

Vulkan

Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织(Khronos Group) 在2015年游戏开发者大会(GDC)上发表。

科纳斯最先把VulkanAPI称为“下一代OpenGL行动”(next generation OpenGL initiative)或“glNext”,但在正式宣布Vulkan之后这些名字就没有再使用了。就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan并计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和AMD的Mantle的目标。Vulkan兼容Mantle的一个分支,并使用了Mantle的一些组件。

Vulkan旨在提供更低的CPU开销与更直接的GPU控制,其理念大致与Direct3D 12和Mantle类似。Vulkan不再使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。应用程序能够充分利用CPU的多核多线程的计算资源,降低CPU等待,降低延迟。带来的问题是。线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。

Metal

在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提高 10 倍的渲染性能,并支持大家熟悉的游戏引擎及公司。

Metal 是一项全新的技术,专为开发高临场感主机游戏的开发者打造,可让开发者全力发挥 A7 和 A8 芯片的性能。该技术经过优化,使处理器和图形处理器能够协同工作来实现最优性能。它专为多线程而设计,并提供各种出色工具将所有素材整合在Xcode中。

总结

常用的一些渲染引擎,比如Unity、Cocos2d-x、OpenSceneGraph、Skia等都是基于上述图形API来实现的。图形渲染说到底最后都是通过操作GPU来实现,只是不同平台有相对应的图形渲染库而已,OpenGL则可以说是跨平台之王。

下图表格是常用图形渲染API的比较:


​​​​​​​

常用图形渲染API简介相关推荐

  1. 【Netty】NIO 网络通信 SelectionKey 常用 API 简介

    文章目录 I . SelectionKey 简介 II . SelectionKey 事件简介 III . SelectionKey 常用 API 简介 I . SelectionKey 简介 1 . ...

  2. 【uni-app教程】UniAPP 常用组件和 常用 API 简介# 知心姐姐聊天案例

    五.UniAPP 常用组件简介 uni-app 为开发者提供了一系列基础组件,类似 HTML 里的基础标签元素,但 uni-app 的组件与 HTML 不同,而是与小程序相同,更适合手机端使用. 虽然 ...

  3. 线程编程常见API简介(中)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 在<线程编程常见API简介(上) >中讲述了有关线程创建过程中常用的 API 的使用方法,本节继续讲述有 ...

  4. java apache commons_Apache commons(Java常用工具包)简介

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...

  5. [转载]JavaMail API简介

    JavaMail API简介 JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理 (Mail User Agent ,MUA) 类型的 ...

  6. Elasticsearch入常用RESTful API总结

    RESTful API HTTP动词介绍 对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项 ...

  7. WebSocket API简介

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...

  8. web API简介(二):客户端储存之document.cookie API

    概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...

  9. 【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )

    文章目录 I Socket API 简介 II ServerSocket API 简介 III Socket 数据交互 IV Socket 客户端操作流程 V Socket 服务器端操作流程 VI S ...

最新文章

  1. HttpClient basic authentication
  2. java trace优化_使用Arthas trace定位并优化接口响应慢的问题.md
  3. Asterisk使用数据库配置方法
  4. InDesign教程,如何更改字体和字体大小?
  5. python对日志处理的封装
  6. pclint vc2012配置
  7. 窗口电压比较器电路设计
  8. 为什么培训班出来的程序员总遭人嫌弃?
  9. 激光雷达电力巡基于机载激光雷达技术的输电线路树障普查及预警
  10. Matlab图形的线型、标记、颜色
  11. 基于ATtiny85制作MIDI数字音乐盒
  12. Web前端之HTML+CSS的知识总结
  13. 个人NAS家庭服务器解决方案概况
  14. SpringBoot整合grpc
  15. 有关H5的第三章表单介绍
  16. win10蓝牙链接上的标准串行com口无法删除
  17. 阅读Decoupled Spatial-Temporal Attention Network for Skeleton-Based Action Recognition
  18. js 驼峰转下划线
  19. 电脑突然经常死机?(ubuntu系统如何检查原因)
  20. 创始人专访 | Paul:听到自己的学员取得科研成功,是最大的幸福之一

热门文章

  1. java的时间日期类_Java基础学习:日期时间类
  2. 试题 算法训练 预测身高
  3. 微信开发者工具更换默认用户存储目录(User Data)方法
  4. 【python】计算miou
  5. 国产操作系统银河麒麟V10桌面系统文件共享配置
  6. 图论 SCC(CCF高速公路)
  7. python123判断火车票座位号分布图_面向回家编程!GitHub标星两万的Python抢票教程”,我们先帮你跑了一遍...
  8. 如何利用工具低成本构建阿里云灾备方案?
  9. 【从FT到DFT和FFT】(一)从三角函数正交性到傅里叶变换的详细公式推导
  10. TFTP服务器与客户端的安装