OpenGL

转载 2009年11月21日 20:32:00
 

OpenGL (全写Open G raphics L ibrary)是个定义了一个跨编程语言、跨平台编程接口 的规格,它用于生成二维三维 图象。这个接口由近三百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。而另一种编程接口系统是仅用于Microsoft Windows 上的Direct3D 。OpenGL常用于CAD虚拟实境 、科学可视化程序和电子游戏开发

OpenGL的高效实现(利用了图形加速硬件)存在于Windows ,很多UNIX 平台和MacOS 。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码Mesa 是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。

OpenGL规范由1992年 成立的OpenGL架构评审委员会(ARB)维护。ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。根据OpenGL官方网站,2002年 6月 的ARB投票成员包括3DlabsApple ComputerATI TechnologiesDell ComputerEvans & SutherlandHewlett-PackardIBMIntelMatroxNVIDIASGISun MicrosystemsMicrosoft 曾是创立成员之一,但已于2003年 3月 退出)。

目录

[隐藏 ]

 

[编辑 ] 扩展

当独立厂商建立一种新技术时,OpenGL标准允许它们通过“扩展”的方法提供所扩展的功能。然后一个扩展就分成两部分发布:包含扩展函数原型的头文件和作为厂商的设备驱动 。 每个厂商有一个用于命名它们的新函数和常量的字母缩写。例如,NVIDIA的缩写(“NV”)用于定义它们的专有函数 “glCombinerParameterfvNV()”和它们的常量“GL_NORMAL_MAP_NV”。如果多于一个厂商同意实现相同的扩展功能, 那么就用缩写“EXT”。进一步,架构评审委员会可能“祝福”这个扩展,那么这就被称为一个“标准扩展”,使用缩写“ARB”。第一个ARB扩展是 GL_ARB_multitexture。根据官方扩展提升路径,多纹理不再是可选实现的ARB扩展,它已经是OpenGL 1.4以后的内核API的一部分。

几个库建立在OpenGL之上,提供了OpenGL本身没有的功能:

特别是,OpenGL Performer 库——由SGI开发并可以在IRIXLinuxMicrosoft Windows 的一些版本上使用,构建于OpenGL,可以建立实时 可视化仿真程序。

当开发者需要使用最新的OpenGL扩展时,他们往往需要使用GLEW 或者是GLEE 库提供的功能,可以在程序的运行期判断当前硬件是否支持相关的扩展,防止程序崩溃甚至造成硬件损坏。

[编辑 ] 绑定

为了加强它的多语言和多平台特性,已经用很多语言开发了OpenGL的各种绑定和移植。最值得注意的是,Java3D 库已经可以利用OpenGL(另一个选择可能是DirectX )作为它的硬件加速了。OpenGL官方网页[1] 列出了用于JavaFortran 90PerlPikePythonAdaVisual Basic 的多个绑定。

[编辑 ] 高级功能

OpenGL被设计为只有输出的,所以它只提供渲染 功能。内核API 没有窗口系统 、音频、打印 、键盘/鼠标或其他输入设备 的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染 的代码完全独立于他运行的操作系统 ,允许跨平台开发。然而,有些集成于本地窗口系统的东西需要允许和宿主系统交互。这通过下列附加API实现:

另外,GLUT 库能够以可移植的方式提供基本的窗口功能。

[编辑 ] 历史

OpenGL进化自(而且风格很相似)SGI的早期3D接口IRIS GL 。IRIS GL的一个限制是它只能访问底层硬件提供的特性。如果图形硬件不支持例如纹理映射 这样的功能,那么应用程序就不能使用它。OpenGL通过在软件上对硬件不支持的特性提供支持的方法克服了这个问题,允许应用程序在相对低配置的系统上使用高级的图形特性。Fahrenheit 项目是Microsoft和SGI之间的联合行动,为了统一OpenGL和Direct3D接口的目的。它一开始提出了一些把规则带给交互3D计算机图形API世界的承诺,但因为SGI的财政限制,这个项目后来被放弃了。

[编辑 ] 外部链接

Opengl入门系列- FBO的渲染到纹理的用法

前半部分引用的是这位大侠的博客,目的说明渲染到纹理的过程。后面例子是我自己写的。 原文地址:http://www.cppblog.com/init/archive/2012/02/16/165...
  • zg260
  • zg260
  • 2014年10月24日 18:07
  • 4632

学习OpenGL(四)绘制直线

绘制直线跟上一节绘制点差不多,毕竟直线是由点组成的。但这里需要注意的是,我们说的直线是有端点的,不是射线和构造线(两端无线延伸的)。 下面上代码,看看如何绘制直线。 void myDisplay(...
  • th_gsb
  • th_gsb
  • 2016年04月01日 17:25
  • 2208

OPenGL绘制几何体函数

void WireCube(GLdouble);                                              //画线框立方体 void WireSphere(GLdo...

OpenGL的安装与配置

OpenGL的安装与配置 小白所用的环境是visual studio 2012 express 版本,现在visual studio 都默认支持OpenGL,所以我们不需要再去官网下载OpenGL,...

从零开始学习OpenGL ES之三 – 透视

现在你已经知道OpenGL是怎样绘图的了,让我们回头谈谈一个很重要的概念:OpenGL视口(viewport)。 许多人对3D编程还很陌生,那些使用过像Maya, Blender, 或 Lightwa...

Qt5下OpenGL程序的新写法

在Qt5中,引入了QOpenGL*系列类,以取代Qt4时代的QGL*系列类。 下面是从Qt5例子中抠出的两种OpenGL程序模板,方便参考。 第一种写法: #ifndef TRI...

OpenGL学习二十:纹理函数

通过纹理函数(glTexEnv*())可以把纹理图像的颜色与物体表面的原先的颜色进行混合 当我们指定纹理数据时,其第三个参数internalformat可以简化为6种格式 基本内部格式 所提...

翻写Nehe的OpenGL教程之准备篇(Xcode+C开发)

Nehe的OpenGL教程,准备从把所有教程边学边翻写,开发平台是 Mac + Xcode + c。...

非常简单,教你用OpenGL读入obj模型

最近在学习OpenGL如何读入obj模型的时候,发现百度出来,相应的示例程序要么跑不通、要么较复杂,初学者的我想找到个简单易懂的示例程序愣是没找到。只好自己通过谷歌学习之后,写了个简单的示例程序,实现...

OpenGL固定管线与可编程管线对比

很久没碰OpenGL了,因为之前看过《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》(后面简称《图》),觉得自己已经掌握了OpenGL基础,而且红宝书第8版写得太文绉绉了,又厚...
  • outtt
  • outtt
  • 2017年06月14日 20:05
  • 476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL
举报原因:
原因补充:

(最多只允许输入30个字)