资料介绍
OpenGL是一种接口,在我们的应用程序中可以用它来访问或者控制它所运行的设备的图形子系统。它所运行的设备可以从一个高端图形工作站到商用台式机、视频游戏主机甚至是一台智能手机。将这些设备的接口标准化到一个子系统可以增强移植性并且可以让软件开发者集中精力创作高品质的产品、制作更有有趣的内容以及关心他们的应用的整体效能,而不是陷于他们想要应用运行的平台的细节中。这些标准接口被称为Apllication ProgrammingInterfaces(or APIs),OpenGL是其中之一。这一章简要介绍OpenGL,描述它如何与底层的图形子系统关联,并且提供一些OpenGL的起源和演化历史。
生成一个高效能并且高容量的产品通常需要两个东西:可伸缩性(scalability)和并行性(parallelism)。在工厂中,这两个东西通过使用产品线(production lines)来达成。说来就是一个工人安装汽车的引擎,另一个安装车门,再另一个安装车轮。通过将产品的生产阶段进行重叠,每一个阶段都由一个专业的专家来专门完成这个任务,这样每一个阶段就变得更高效,然后整体生产效率就会提升。同样,通过在同一时间制作很多汽车,一个工厂可以让多个工人专门安装引擎,或者多个工人专门安装车轮,这样多辆汽车可以同时运作在产品线上,每辆车都处在完工的不同阶段。
计算机图形是同样的道理。我们的程序发送命令给OpenGL,然后OpenGL以一种尽可能高效的方式将命令发送给底层的图形硬件来产生预期的结果。在图形硬件上可能有很多命令排队等待执行(专业术语称为in flight),其中一些命令可能是完成了一部分的。一个处于后续阶段的命令可以和一个处于前期阶段的命令被并发执行,这样它们的执行就重叠了。此外,计算机图形通常由很多非常相似的重复性任务组成(例如计算一个像素该为什么颜色)并且这些任务都彼此独立--意即,一个像素的颜色与另外一个像素的颜色没有任何关系。就好像一个车间可以同时制造多个汽车,所以OpenGL可以把你给他的工作拆解开然后用它的基础元素并行完成。通过组合管线(pipelining)和并行(parallelism),现代图形处理器超乎想象的性能就被实现了。
OpenGL的目的是在我们的应用程序和底层的图形子系统中间提供一个抽象层(abstractionlayer),图形子系统通常是一个硬件加速器(由一个或多个自定义的高性能处理器和专用内存、显示输出等等构成)。这个抽象层可以使我们的应用程序不必知晓谁是制造的图形处理器(或者叫GPU - 图形处理单元)、它如何工作、它工作得好不好。当然我们的应用程序仍然可以获知这些信息,重要的是我们的应用程序不必如此。作为一个设计原则,OpenGL必须在抽象层次的过高与过低之间取得平衡。一方面,它必须隐藏不同制造商的产品的区别(或者同一厂商的不同产品)和平台相关的特性,比如:显示屏分辨率、处理器架构、安装的操作系统等等。另一方面,它的抽象层次要低到可以让程序员获得底层硬件的访问权限并且充分利用它。如果OpenGL展现过高的抽象层次,这样它就可以很容易地用来创造符合它的样式的程序,但却很难使用到它未包含的图形硬件的高级特性。这种高层次抽象的样式有一些软件用到,如:游戏引擎--为了让基于它构建的游戏访问到新的图形硬件特性通常需要对引擎做出很大量的改变。如果抽象层次过低,应用程序需要关心它们所运行的平台的架构特性。低层次抽象在比如视频游戏主机中比较普遍,但这种抽象层次的图形库不能跨平台支持从移动手机到游戏的个人电脑甚至高性能专业的图形工作站。
随着技术的发展,计算机图形进行了越来越多的研究,最佳实践被开发出来,瓶颈和需求在变化,所以OpenGL也必须不断变化赶上时代。
大多数OpenGL实现都基于当前最先进的图形处理单元,可进行多个每秒万亿次浮点运算的运算能力、拥有好多G每秒吞吐量好几百G的内存、并且可以驱动多个几百万像素高频刷新的显示器。GPU也超级灵活,以至于可以处理跟图形完全不沾边的任务,比如:物理模拟、人工智能、甚至音频处理。
如今的GPU由大量的小型可编程处理器(被称为shader cores)组成,这些shader cores运行一种叫做着色器(shaders)的迷你程序。每个core有相对较低的吞吐量、在一个或多个时钟周期内处理shader的一条指令,并且一般缺少高级的特性,比如: 无序执行、分支预测、超标量技术等等。但每个GPU都可能包含从几十个到几千个这样的core,当它们聚集在一起时可以完成一个巨量的工作。图形系统被分解为多个阶段(stages),每个阶段被用一个shader或者固定功能函数(fixed-function)、可能可配置的处理区块表示。图示1.1展示了一个精简的图形管线的概要。
- 通信原理第七版习题 0次下载
- LabVIEW宝典的源代码合集免费下载 70次下载
- Qt OpenGL中文使用教程免费下载 38次下载
- 苹果iPhone 7的原厂原理图和元件图及维修宝典资料免费下载 426次下载
- OpenGL教程之《OpenGL超级宝典》中文第七版资料免费下载 0次下载
- openGL运行环境详细资料免费下载 5次下载
- Autocad试用版官方中文版免费下载 23次下载
- 电机学(第七版)电气工程电子教材免费下载 0次下载
- 《电工学课后习题详解-第七版》(上册)一本全-秦曾煌-著--高等 0次下载
- LED电源的PCB设计宝典资料下载 10次下载
- 电路原理(第七版)part4 0次下载
- 电路原理(第七版)part1 0次下载
- 电路原理(第七版)part2 0次下载
- 电路原理(第七版)part3 0次下载
- 驱动程序超级宝典 52次下载
- 超级电容是什么?超级电容的性能特性 106次阅读
- 超级电容电池原理_超级电容电池续航时间 8704次阅读
- 超级电容电池原理_超级电容电池的弊端 1.2w次阅读
- 超级电容怎么用_正确使用超级电容 1.9w次阅读
- Android OpenGL ES开发:投影和相机视图创建和应用 1153次阅读
- 如何把OpenGL中3D坐标转换成2D坐标 8226次阅读
- OpenGL中的深度、深度缓存、深度测试 3428次阅读
- OpenGL绘制图形单元的技巧介绍 2603次阅读
- 初学OpenGL:什么是绘制上下文 2265次阅读
- 简单解析OpenGL ES为缓存提供数据的7个步骤 5323次阅读
- opengl主要功能介绍 7404次阅读
- win10超级终端在哪里?SecureCRT的使用 9.9w次阅读
- 学习模拟电子技术的6本“宝典”推荐 4210次阅读
- keil uvision2下载|keil uvision2汉化免费版下载 1.1w次阅读
- AUTOCAD2009免费下载中文版 CAD2009简体中文下载及安装方法 1.2w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多