转自:http://www.cnblogs.com/indif/archive/2011/04/22/2024659.html

1.什么是OpenGL?
OpenGL即开放图形库(Open Graphics Library),它是一套用来进行3D图形渲染的应用程序编程接口。
更专业点说,OpenGL是一套在场景中绘制三角形的API,它是直接与GPU打交道的。它不管任何诸如图片文件的读取、3D模型的解析、动画、鼠标键盘输入、窗口创建等绘制以外的事情。

2.谁管理OpenGL?
OpenGL结构体系委员会(OpenGL Architectural Review Board)负责管理OpenGL标准以及它的发展。

3.OpenGL是开源的吗?
不是,OpenGL本身没有任何源代码。GL是一套规格说明,它描述了开发者可以使用的接口以及调用接口将产生的行为。OpenGL是一套开放的标准,任何人都可以免费得到它(从OpenGL网站上下载)。这与ISO的标准和规格说明正相反,那些标准是必须付费才能得到的。
Mesa3D是GL标准的一个开源实现(http://www.mesa3d.org)。

4.到哪下载OpenGL?
OpenGL不是一个软件,它是一套标准(规格说明)。
在苹果电脑上,OpenGL实现被包含在操作系统中提供。
在Windows系统上,OpenGL实现是由像nVidia、AMD这样的显卡厂商提供的,他们根据GL规格说明结合自己显卡硬件来开发自己的OpenGL实现,并将之作为显卡驱动程序的一部分提供用户安装使用。
对于开发者来说,安装显卡驱动不会为你安装开发OpenGL程序所需的开发库(gl.h、opengl32.lib),这些文件是随你的编译器(如VC)安装的,并且永远锁定在GL1.1版本。
同样,安装显卡驱动也不会更新opengl32.dll文件,这个文件是随操作系统安装的,只有微软会对它进行更新。当你安装显卡驱动的时候,一个底层的驱动文件会被安装,opengl32.dll会把调用传递给这个真正的GL驱动文件(nVidia的nvoglv32.dll)。

5.SDK?
严格来说,OpenGL没有真正意义上的SDK,只有网上的一些文档、示例代码。
NVIDIA和AMD都有自己的SDK,包含各种基于OpenGL的示例。

6.哪些操作系统支持GL?
Windows 95以上版本
苹果系统的所有版本
Linux

7.OpenGL在windows系统中是怎样工作的?
所有版本的windows系统都支持OpenGL。
编译OpenGL应用程序的时候,需要链接到OpenGL动态库opengl32.dll(即使在64位系统也一样)。
当运行OpenGL应用程序的时候,opengl32.dll被加载,然后它检查windows注册表看是否有一个真正的底层GL驱动,如果有就加载它。如,ATI的GL驱动为atioglxx.dll,nVidia的GL驱动文件是nvoglv32.dll。
opengl32.dll永远限定在GL1.1版本,对于1.2以上的功能,你使用wglGetProcAddress接口获得的功能对应的函数指针,这些函数指针来自对应底层GL驱动。
需要明确的一点是,opengl32.dll属于windows系统,没人可以修改它,你也不能替换它,不能把它包含在你的程序安装包里,你也不能把nvoglv32.dll等驱动文件包含在你的安装包里,那是显卡驱动安装程序要做的。

8.我怎样知道正在使用的OpenGL的版本?
使用glGetString(GL_VERSION),将返回包含OpenGL版本的字符串。
或者,使用glGetIntergerv(GL_MAJOR_VERSION, *)和glGetIntegerv(GL_MINOR_VERSION, *)。(需要GL3.0支持)
也可以使用glGetString(GL_VENDOR)查询显卡厂商,使用glGetString(GL_RENDERER)查询显卡型号。

9.为什么我的GL版本只有1.4或更低?
对于OpenGL版本过低的情况,一般有两种情况:
第一:在windows系统上,如果你在创建渲染环境的时候使用了一个未加速的像素格式(Pixel Format),那么你将获得缺省的OpenGL实现(相对于显卡加速实现),可能会是软件GL1.1或硬件GL1.5,具体取决于操作系统的版本。
第二:你的显卡厂商没有提供更新的OpenGL实现。这经常发生在一些已经退出市场的显卡上。另外就是Inter集成显卡,Inter不对它的集成显卡提供更新的OpenGL实现。这种情况在NVIDIA和AMD显卡上不会出现。

10.glTranslate、glRotate、glScale是否有硬件加速?
不,没有任何已知的GPU会执行任何的矩阵运算,驱动程序在CPU上完成所有的矩阵运算然后把结果传递给GPU。这也是为什么在GL3.0以后版本中弃用这些接口。你需要建立自己的数学运算库,创建并运算矩阵,然后把结果传递给shader程序。

11.固定功能管线与现代GPU?
现代GPU不再支持固定功能管线,它通过shader程序完成所有事情。为了保持兼容性,GL驱动程序创建一组shader程序来模拟固定管线的功能。新的开发者应该学习shader编程,而不再需要学习固定管线函数如glLight、glMaterial等。

12.怎样在像素空间渲染?
使用正交投影。

13.怎样处理多索引?
多索引是指,每一种顶点属性(位置、法线、颜色等)都有各自不同的索引数组。OpenGL不支持这种多索引的渲染。
因此,你必须自己处理这种情况,把数据整合,使其使用一个共同的索引数组,这通常会导致数据复制和冗余。

14.gl.h、glu.h、glaux.h、glut.h分别代表什么?
gl.h是OpenGL核心库的头文件,对应的导入库和动态库为opengl32.lib和opengl32.dll。
glu.h是OpenGL功能函数库的头文件,对应glu32.lib和glu32.dll,它同样是OpenGL库的一部分。
glaux.h是微软提供的OpenGL库的扩展,已经废弃。
glut.h是一个第三方的OpenGL扩展库,主要为开发者处理窗口、输入等渲染以外的事情,它也是跨平台的。

OpenGL FAQ的更多相关文章

  1. OpenGL快问快答

    OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...

  2. OpenGL 学习笔记 01 环境配置

    以下教程仅适用于Mac下的Xcode编程环境!其他的我也不会搞. 推荐教程:opengl-tutorial  本项目Github网址       OpenGL太可怕了...必需得把学的记下来,不然绝壁 ...

  3. OpenGL.Tutorial文章转载

    ZC:本来以为没有中文版的,原来有中文版,网址为: ZC: OpenGL3.0教程 _ 泰然网.html(http://www.tairan.com/archives/6126/) ZC: OpenG ...

  4. OpenGL学习脚印:深度測试(depth testing)

    写在前面 上一节我们使用AssImp载入了3d模型,效果已经令人激动了.可是绘制效率和场景真实感还存在不足,接下来我们还是要保持耐心,继续学习一些高级主题,等学完后面的高级主题,我们再次来改进我们载入 ...

  5. OpenGL学习--08--基本渲染(灯光)

    1.tutorial08.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> #inc ...

  6. OpenGL学习--07--模型加载(obj)

    1.tutorial07.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> #inc ...

  7. OpenGL学习--06--键盘与鼠标交互

    1.tutorial06.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> // I ...

  8. OpenGL学习--05--纹理立方体--代码

    1.tutorial05.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> // I ...

  9. OpenGL学习—04--彩色立方体

        1.tutorial04.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> ...

随机推荐

  1. [转载] Win7KB3146706补丁导致蓝屏0x0000006B的修复方案

    进入winpe,将附件的蓝屏6B修复补丁kb3146706.zip的补丁替换windows/system32下面的ci.dll文件,里面有64和32位系统的,替换了文件就可以进入系统了. 启动进入系统 ...

  2. WebApp中的页面生命周期及路由管理

    最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...

  3. snmp ubuntu/centos--

    软件安装 切换到系统管理员帐户 安装snmp确认snmp代理已安装rpm -q net-snmp如果未安装,安装snmpyum install net-snmp 设置开机自动运行snmp/sbin/c ...

  4. 关于新版ADT创建项目时出现appcompat_v7的问题

    做Android开发的朋友最近会发现,更新ADT至22.6.0版本之后,创建新的安装项目,会出现appcompat_v7的内容.并且是创建一个新的内容就会出现.这到底是怎么回事呢?原来appcompa ...

  5. 五子棋AI清月连珠开源

    经过差不多两年的业余时间学习和编写,最近把清月连珠的无禁手部分完善得差不多了.这中间进行了很多思考,也有很多错误认识,到现在有一些东西还没有全面掌握,所以想通过开源于大家共同交流. 最近一直发表一些五 ...

  6. jvm性能参数与调优

    本文中的参数并齐全,看了http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html的相关文章写得很好,可以看一看 1.jvm堆内存简 ...

  7. Flash+fms视频录制在项目中的实际应用

    Flash+fms视频录制在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而flash+fms视频录制有多种实现方式,具体可根据实际情况而定! 1:古人云:工欲善其事,必先利其器,首先安装f ...

  8. 使用NUGet自动下载(还原)项目中使用的包

    签出完整项目后,在解决方案名称上点右键,选择"启用NuGet程序包还原",如下图: 出现询问,当然要点是:是 当完成后,会发现在解决方案中,多出".nuget" ...

  9. 制作自己的嵌入式Linux电脑_转

    制作自己的嵌入式Linux电脑 http://os.51cto.com/art/201409/450334.htm 原文链接:http://blog.jobbole.com/75414/ 包含器件选择 ...

  10. [CC]点云密度计算

    包括两种计算方法:精确计算和近似计算(思考:local density=单位面积的点数 vs  local density =1/单个点所占的面积) 每种方法可以实现三种模式的点云密度计算,CC里面的 ...