OpenGL学习----基本概念-OpenGL介绍
1. 基本概念
1.1 OpenGL介绍
1.1.1 概述
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。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月退出。
1.1.2 设计
OpenGL规范描述了绘制2D和3D图形的抽象API。尽管这些API可以完全通过软件实现,但它是为大部分或者全部使用硬件加速而设计的。
OpenGL的API定义了若干可被客户端程序调用的函数,以及一些具名整型常量(例如,常量GL_TEXTURE_2D对应的十进制整数为3553)。虽然这些函数的定义表面上类似于C编程语言,但它们是语言独立的。因此,OpenGL有许多语言绑定,值得一提的包括:JavaScript绑定的WebGL(基于OpenGL ES 2.0在Web浏览器中的进行3D渲染的API);C绑定的WGL、GLX和CGL;iOS提供的C绑定;Android提供的Java和C绑定。
OpenGL不仅语言无关,而且平台无关。规范只字未提获得和管理OpenGL上下文相关的内容,而是将这些作为细节交给底层的窗口系统。出于同样的原因,OpenGL纯粹专注于渲染,而不提供输入、音频以及窗口相关的API。
OpenGL是一个不断进化的API。新版OpenGL规范会定期由Khronos Group发布,新版本通过扩展API来支持各种新功能。每个版本的细节由Khronos Group的成员一致决定,包括显卡厂商、操作系统设计人员以及类似Mozilla和谷歌的一般性技术公司。
除了核心API要求的功能之外,GPU供应商可以通过扩展的形式提供额外功能。扩展可能会引入新功能和新常量,并且可能放松或取消现有的OpenGL函数的限制。然后一个扩展就分成两部分发布:包含扩展函数原型的头文件和作为厂商的设备驱动。供应商使用扩展公开自定义的API而无需获得其他供应商或Khronos Group的支持,这大大增加了OpenGL的灵活性。OpenGL Registry负责所有扩展的收集和定义。
每个扩展都与一个简短的标识符关系,该标识符基于开发公司的名称。例如,英伟达(nVidia)的标识符是NV。如果多个供应商同意使用相同的API来实现相同的功能,那么就用EXT标志符。这种情况更进一步,Khronos Group的架构评审委员(Architecture Review Board,ARB)正式批准该扩展,那么这就被称为一个“标准扩展”,标识符使用ARB。第一个ARB扩展是GL_ARB_multitexture。
OpenGL每个新版本中引入的功能,特别是ARB和EXT类型的扩展,通常由数个被广泛实现的扩展功能组合而成。
1.1.3 相关程序库
早期的 OpenGL 版本会一同发布配套的 GLU 库,提供一些同时代硬件尚不支持的简单功能。GLU 最后一次更新规格要求是在 1998 年,对已弃用的 OpenGL 特性有依赖。
还有几个库也创建在OpenGL之上,提供了OpenGL本身没有的功能:
- GLFW
- GLUT
- GLEW、GLEE
特别是,OpenGL Performer库——由SGI开发并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,构建于OpenGL,可以创建实时可视化仿真程序。
当开发者需要使用最新的OpenGL扩展时,他们往往需要使用GLEW库或者是GLEE库提供的功能,可以在程序的运行期判断当前硬件是否支持相关的扩展,防止程序崩溃甚至造成硬件损坏。这类库利用动态加载技术(dlsym、GetProcAddress等函数)搜索各种扩展的信息。
1.1.4 上下文与窗口包
OpenGL 上下文(英语:OpenGL context)的创建过程相当复杂,在不同的操作系统上也需要不同的做法。因此很多游戏开发和用户界面库都提供了自动创建 OpenGL 上下文的功能,其中包括 SDL、Allegro、SFML、FLTK、Qt 等。也有一些库是专门用来创建 OpenGL 窗口的,其中最早的便是 GLUT,后被 freeglut 取代,比较新的也有 GLFW 可以使用。
以下包可以用来创建并管理 OpenGL 窗口,也可以管理输入,但几乎没有除此以外的其它功能:
- GLFW——跨平台窗口和键盘、鼠标、手柄处理;偏向游戏
- freeglut——跨平台窗口和键盘、鼠标处理;API 是 GLUT API 的超集,同时也比 GLUT 更新、更稳定
- GLUT——早期的窗口处理库,已不再维护
支持创建 OpenGL 窗口的还有一些“多媒体库”,同时还支持输入、声音等类似游戏的程序所需要的功能:
- Allegro 5——跨平台多媒体库,提供针对游戏开发的 C API
- SDL——跨平台多媒体库,提供 C API
- SFML——跨平台多媒体库,提供 C++ API;同时也提供 C#、Java、Haskell、Go 等语言的绑定
窗口包
- FLTK——小型的跨平台 C++ 窗口组件库
- Qt——跨平台 C++ 窗口组件库,提供了许多 OpenGL 辅助对象,抽象掉了桌面版 OpenGL 与 OpenGL ES 之间的区别
- wxWidgets——跨平台 C++ 窗口组件库
1.1.5 历史
1980年代,开发可以用在各种各样图形硬件上的软件是个真正的挑战。通常,软件开发人员为每种硬件编写自定义的接口和驱动程序。但这非常昂贵并会导致大量工作的重复。
20世纪90年代初,SGI成为工作站3D图形领域的领导者。其IRIS GL的API被认为是最先进的科技并成为事实上的行业标准,而基于开放标准的PHIGS则相形见绌。IRIS GL更容易使用,而且还支持即时模式的渲染。相比之下,PHIGS难于使用并且功能老旧。
SGI的竞争对手(包括Sun、惠普和IBM)通过扩展PHIGS标准也能将3D硬件投入市场。这反过来导致SGI市场份额的削弱,因为有越来越多的3D图形硬件供应商进入市场。为攻占市场,SGI决定把IRIS GL API转变为一项开放标准,即OpenGL。
然而,SGI拥有大量的软件客户,对他们来说从IRIS GL迁移到OpenGL将需要巨额投资。此外,IRIS GL的应用程序接口拥有与3D图形不相关的函数。例如,它包括窗口、键盘和鼠标的API,部分原因是由于它是在X Window系统和Sun公司的NeWS系统之前开发的。而且,IRIS GL库由于授权和专利问题并不适合开放。上述种种因素要求SGI继续支持先进和专有的IRIS Inventor和IRIS Performer应用程序接口。
IRIS GL的限制之一是只能访问由底层硬件支持的功能。如果图形硬件不支持一项功能,那么该应用程序将不能使用它。OpenGL通过为硬件不具备的功能提供软件支持克服了此问题,这就允许应用程序在相对较弱的系统中使用先进的图形技术。OpenGL标准化了访问硬件的方式:硬件接口程序的开发(有时也称为设备驱动程序)交由硬件制造商,而窗口功能委托给底层操作系统。让大量不同种类的图形硬件将同一种语言影响深远,它为软件开发者进行3D软件发展提供了更高层次的平台。
1992年,SGI公司领导了OpenGL架构审查委员会(OpenGL ARB)的创建。该委员会由若干公司组成,负责未来OpenGL规范的维护和扩展。
微软在1995年发布Direct3D,Direct 3D最终成为OpenGL的主要竞争对手。1997年12月17日,微软和SGI发起华氏温标项目,旨在统一OpenGL和Direct3D的接口。1998年,惠普加入。后来,由于SGI的财政限制、微软的战略以及缺乏行业普遍支持,项目1999年遭弃。
2006年7月,OpenGL架构评审委员会投票决定将OpenGL API标准的控制权交给Khronos Group。
1.2 SGI
硅谷图形公司(英语:Silicon Graphics, Inc.,简称:SGI,1981年11月-2006年3月8日),在台湾早年译为视算科技、视算电脑,是一家由吉姆·克拉克和艾比·席维史东创建的美国电脑公司。
SGI最初于1981年11月在美国加州创立,1982年开始生产图形显示终端,并在1990年1月作为Delaware corporation重建。2006年3月8日,SGI申请破产保护。2009年4月1日,服务器与存储技术公司Rackable Systems宣布计划以大约2500万美元现金收购SGI剩余资产,同时还将承担其部分债务。
2016年8月11日,慧与科技(HPE, Hewlett Packard Enterprise)宣布以每股美金7.75, 合共2亿7仟5百万美金, 收购SGI所有股权, 当中包括其所持现金与承担其所有债项。
SGI公司是业界高性能计算系统、复杂数据管理及可视化产品的重要提供商. 它提供世界上最优秀的服务器系列以及具有超级计算能力的可视化工作站。公司在业界率先集成了RISC技术、均衡多重处理技术、数字化媒体技术、计算机图形技术、UMA及CCNUMA体系结构等计算机领域的核心科技,形成了自己的独特风格,开创了视算科技及信息处理的新方向。
在当今的计算机界,SGI 的名字虽不如IBM、HP那样有名,但其产品和技术在图形和高性能计算领域有着其他产品无法替代的地位。SGI公司早期便致力于图形卡的研究和制造,后来便开始生产自己的图形工作站产品。 SGI的创始人是吉姆·克拉克(James Clark)博士,他出生于美国德州乡村小镇,中学辍学参军,靠自学获得中学同等学历。服完兵役的克拉克考进犹他大学专攻电脑制图,1978年获博士学位。四年后,他以自己研制的图形工作站和三维绘图软件创办SGI,然后快速成长为世界著名的图形软硬件制造商。1995年并购著名的动画软件公司Alias Wavefront(2004年售出),从而拥有了属于自己的软件。看看SGI的发展史:1983年,第一批图形终端推出;1984年,第一批图形工作站推出,由此可以看出,它对图形工作站的贡献有多么巨大。大家所熟悉的「侏罗纪公园」、「指环王」、「紧急迫降」等影片均是在SGI的图形工作站上制作出来的。这里顺便说一下,世界电影史上花费最大、最成功的电影之一——「泰坦尼克号」的成功很大程度上得益于它对电脑动画的大量应用,成功模拟了当时悲壮的情景。世界著名的数字工作室Digital Domain公司用了一年半的时间,动用了300多台SGI超级工作站,并派出50多个特技师一天24小时轮流制作「泰坦尼克号」中的电脑特技。
1.3 Khronos Group
科纳斯组织(Khronos Group)是一个由成员资助的,专注于制定开放标准(Open standard)的行业协会,重点制定免费的API,使在各种平台和设备上创作或播放的多媒体可以得到硬件加速。
相关标准:
- OpenCL,跨平台通用计算API。
- OpenGL,跨平台计算机图形API。
- OpenGL ES,OpenGL的派生产品,用于移动和嵌入式系统,如手机、便携式游戏设备等。
- OpenVG,二维矢量图形加速API。
- WebCL,将浏览器中的JavaScript绑定到OpenCL。
- WebGL,将任意平台上浏览器中的JavaScript绑定到OpenGL ES,支持OpenGL或OpenGL ES图形标准。
创始会员:
- AMD
- 苹果公司
- 安谋控股(ARM)
- Epic Games
- 华为
- Imagination Technologies
- 英特尔
- 诺基亚
- 英伟达
- 高通
- 三星电子
- 索尼互动娱乐
- 威尔乌(Valve)
- 芯原微电子
贡献者会员:
- Adobe
- 亚马逊公司
- 暴雪娱乐
- Codeplay
- IBM
- LG电子
- Matrox
- 微软
- Mozilla
- 任天堂[8]
- Oculus VR
- Panasonic
- Pixar
- Red Hat
- 瑞萨电子
- Synopsys
- 德州仪器
- Qt公司
- Unity Technologies
- 威盛电子
- VMware
- Xilinx
OpenGL学习----基本概念-OpenGL介绍相关推荐
- 【OpenGL学习笔记①】——openGL flew flgw flut 环境配置 + 绘制出Hello World
该文章旨在帮助 计算机图形学 openGL 初学者快速安装和配置 openGL的环境(包括glew和glfw,还有glut[进阶]),并手把手指导如何绘制出第一句 "Hello Worl ...
- OpenGL学习---1.1 OpenGL基本介绍
前记:非常有乐趣,学!!!-------------------------------博主:mx 核心模式与立即渲染模式 立即渲染模式(Immediate mode,也就是固定渲染管线): 优点:这 ...
- OpenGL学习笔记之三 OpenGL开发环境之GLFW与GLAD配置
内容来源:LearnOpenGL CN 前言 在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口.然而,这些操作在每个系统上都是不一样的,Open ...
- C++ opengl 学习笔记-在OpenGL入门级代码里面glLoadIdentity的理解
在入门级代码里面,当在painter(Qt里的)或者自己写一个draw函数时. 发现总是要压一个矩阵或者调用glLoadIdentity. 下面本人将会结合操作系统来讲解这个为什么!主要目的是给以后的 ...
- 【OpenGL学习笔记②】——OpenGL基础【渲染管线 顶点着色器 片元着色器 VAO VBO 万字总结】
- OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)...
一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...
- OpenGL ES基本概念介绍
最近不太忙,打算这周开始学习下OpenGL,网上也已经有好多关于OpenGL的书籍和资料了.至于为什么还要写,是为了养成一个良好的学习习惯,也算给自己的学习过程做一个总结. 基本概念 OpenGL定义 ...
- OpenGL学习(一)OpenGL基本介绍
1. OpenGL基本介绍 1.1 OpenGL是什么? 当你第一次听到OpenGL时,你可能并不知道它到底是什么,但你应该知道它是与图形联系起来,这确实是OpenGL能够做的事情.OpenGL不 ...
- 【我的OpenGL学习进阶之旅】介绍一下 绘制图元
目录 一.绘制图元 1.1 `glDrawArrays` 1.1.1 `glDrawArrays`API说明 1.1.2 `glDrawArrays`API示例 1.2 `glDrawElements ...
最新文章
- STE:环境菌群代谢产物可预防炎症症状
- proxychains 使用指北
- 推荐几个图标显示控件
- python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
- 为何说国内云桌面已经步入成熟期
- 查看某个github commit属于哪一个github pull request
- Cookie 与Session 的区别
- linux系统批量装机,PXE+Kickstart实现无人值守批量安装Linux
- 找出递增数组中所有相加为m的组合c语言,组合(1-m中选n个数)(示例代码)
- Wootrade宣布加入SushiSwa旗下Mirin协议和子池计划
- 关注细节但不陷入细节
- 多个异步之间的协作方案
- 今日头条下拉词框怎么做的呢?怎么优化推广呢?
- 非科班研究生转码-零基础学java笔记总结复习(1)
- bmi指数计算器PHP代码,BMI指数计算器
- spearman相关性分析_数据的相关分析及SPSS算例
- 方舟原始恐惧mod生物代码_《暗黑地牢》《方块方舟》周末免费试玩,多款游戏历史新低特惠...
- 国企招聘:中国空空导弹2023校园招聘正式启动
- 非最小相位系统的闭环频域辨识算法
- 第二章 51单片机硬件结构