Ubuntu 13.04 安装 OpenGL
2015-03-23 21:25
253 查看
前言
OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上。
OpenGL 让程式开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬体由 OpenGL 核心去沟通,因此只要显示卡支援 OpenGL,那么程式就不需要重新再移植,而程式开发人员也不需要重新学习一组函式库来移植程式。
接下来,我们就一步一步的在Ubuntu底下建立开发OpenGL应用程式的环境。
安装
建立基本编译环境
首先不可或缺的,就是编译器与基本的函式库,如果系统没有安装的话,请依照下面的方式安装:
$ sudo apt-get install build-essential
安装OpenGL Library
接下来要把我们会用到的 Library 装上去,首先安装 OpenGL Library
build-essential 包含最常用的编译工具,gcc,g++
build-essential 指的是编译程序必须的软件包。
查看该软件包的依赖关系,可以看到以下内容:
$ apt-cache depends build-essential
build-essential
|依赖: libc6-dev
依赖: <libc-dev>
libc6-dev
依赖: gcc
依赖: g++
依赖: make
依赖: dpkg-dev
也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可以了。
$sudo apt-get install libgl1-mesa-dev
安装OpenGL Utilities
OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函式,使 OpenGL 更强大且更容易使用。接下来我们安装OpenGL Utilities
$sudo apt-get install libglu1-mesa-dev
安装OpenGL Utility Toolkit
OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。
$sudo apt-get install libglut-dev
注意在这一步的时候,可能会出现以下情况,shell提示:正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 E: 未发现软件包 libglut-dev如果出现上述情况,请输入将上述$sudo apt-get install libglut-dev命令改成$sudo apt-get install freeglut3-dev就行拉,
设定编译参数与编译
测试程序
#include <GL/glut.h>
void init(void){
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5,5,-5,5,5,15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,0,10,0,0,0,0,1,0);
return;
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0,0);
glutWireTeapot(3);
glFlush();
return;
}
int main(int argc,char *argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0,0);
glutInitWindowSize(300,300);
glutCreateWindow("OpenGL #D View");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
编译运行
gcc test.c -o test -lGL -lGLU -lglut
./test.c
-l参数表示要链接的库:在 /usr/lib目录下
头文件在/usr/include/GL下:
因为我们安装了 OpenGL Utility Toolkit ,它是建立在 OpenGL Utilities 与 OpenGL Library 之上,因此我们可以简单连结 OpenGL Utility Toolkit 的函式库就可以达到我们的目地了。下面的编译参数跟上面的是同样效果
gcc test.c -o test -lGLU -lglut
接下来我们就可以来看看我们的结果,如果看到茶壶图片,代表成功了!
补充:
为了取得广泛的平台支持,OpenGL 是不依赖任何窗口系统的,但是我们使用 OpenGL 绘制的三维场景却需要嵌入在某种窗口程序中才可以为人所见。似乎也是约好了的,目前主流的窗口系统(X Window, MS Windows, Mac OS)只是提供了完善的二维图形交互环境,而将复杂的三维图形渲染任务交给 OpenGL (MS Windows 更热衷于用 Direct3D 来取代 OpenGL)。当 OpenGL 与窗口系统们达成了相互依存的默契之后,便出现了用于衔接 OpenGL 与窗口系统的扩展库,这些扩展库的主要目标就是实现
OpenGL 图形与对应窗口画面之间的转换。GLX 库解决了 X Window 中的 OpenGL 图形渲染问题。同样的,WGL 和 AGL 库分别解决了 MS Windows 和 Mac OS 窗口系统中的 OpenGL 图形渲染问题。
GLX 像胶水一样,建立了 X Window、OpenGL 以及 3D 硬件加速驱动之间的联系。在 Linux 中,如果未有安装相应的支持 3D 加速的显卡驱动,那么 GLX 可以调用 Mesa (Unix-like 系统中应用最为广泛的 OpenGL 实现) 的 3D 软件加速来取得 X Window 与 OpenGL 的集成;当然,这种做法所实现的 3D 渲染效率就要大打折扣,并且也会累的
CPU 气喘。多了解一下 X Window 是如何驱动硬件 3D 加速,可以更加深刻的理解 GLX 的工作机理。不过,目前这方面的文档实在太少了,下面文字仅仅是我个人的猜测(和 galeki 有过一番议论),方家路过,还请指正。
目前,Nvidia 和 ATI 这两大主流显卡均面向 Linux 提供了驱动程序,但是它们的做法不相同。Nvidia 驱动提供了自己的 GLX 库,在安装驱动时,会替换掉 X Window 的标准 GLX 库,另外也会将 Mesa 提供的并且只具备 3D 软件加速支持的 libGL 库替换为自己的 libGL 库。Nvidia 驱动还会提供一个 Linux 内核模块,这样可以让 X Window 通过内核访问显卡的帧缓冲区。与 Nvidia 驱动相比, ATI 则显得比较规范(此处不论其驱动的质量优劣),它利用
DRI + Mesa 来实现 3D 硬件加速,而不是像 Nvidia 驱动那样,什么都是自己去实现。最近,ATI 的开源 3D 加速驱动也渐渐浮出水面,以后买显卡,得多考证考证 ATI 了。
目前,应该有 5 个版本,从 1.0 到 1.4,其中比较应用比较广泛的是版本是 1.2,GtkGLExt 所使用的 GLX 库就是这一版本(据说是为了获得跨平台支持不得己而为之)。Nvidia 180.27 提供的 GLX 版本是 1.4,至于 X Window 默认的 GLX 版本,我不清楚。GLX 是向后兼容的,因此,目前许多 X Window 程序使用 GLX 1.2 也是可以正常运行。GLX 1.3 是变动幅度比较大的版本,但是介绍它如何在编程中使用的文档很稀有。下面对一个 GLX
1.2 的编程示例略作修改,权当 GLX 1.3 + Xlib 的编程实例,而至于该实现是否正确,不敢保证。
OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上。
OpenGL 让程式开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬体由 OpenGL 核心去沟通,因此只要显示卡支援 OpenGL,那么程式就不需要重新再移植,而程式开发人员也不需要重新学习一组函式库来移植程式。
接下来,我们就一步一步的在Ubuntu底下建立开发OpenGL应用程式的环境。
安装
建立基本编译环境
首先不可或缺的,就是编译器与基本的函式库,如果系统没有安装的话,请依照下面的方式安装:
$ sudo apt-get install build-essential
安装OpenGL Library
接下来要把我们会用到的 Library 装上去,首先安装 OpenGL Library
build-essential 包含最常用的编译工具,gcc,g++
build-essential 指的是编译程序必须的软件包。
查看该软件包的依赖关系,可以看到以下内容:
$ apt-cache depends build-essential
build-essential
|依赖: libc6-dev
依赖: <libc-dev>
libc6-dev
依赖: gcc
依赖: g++
依赖: make
依赖: dpkg-dev
也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可以了。
$sudo apt-get install libgl1-mesa-dev
安装OpenGL Utilities
OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函式,使 OpenGL 更强大且更容易使用。接下来我们安装OpenGL Utilities
$sudo apt-get install libglu1-mesa-dev
安装OpenGL Utility Toolkit
OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。
$sudo apt-get install libglut-dev
注意在这一步的时候,可能会出现以下情况,shell提示:正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 E: 未发现软件包 libglut-dev如果出现上述情况,请输入将上述$sudo apt-get install libglut-dev命令改成$sudo apt-get install freeglut3-dev就行拉,
设定编译参数与编译
测试程序
#include <GL/glut.h>
void init(void){
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5,5,-5,5,5,15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,0,10,0,0,0,0,1,0);
return;
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0,0);
glutWireTeapot(3);
glFlush();
return;
}
int main(int argc,char *argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0,0);
glutInitWindowSize(300,300);
glutCreateWindow("OpenGL #D View");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
编译运行
gcc test.c -o test -lGL -lGLU -lglut
./test.c
-l参数表示要链接的库:在 /usr/lib目录下
头文件在/usr/include/GL下:
因为我们安装了 OpenGL Utility Toolkit ,它是建立在 OpenGL Utilities 与 OpenGL Library 之上,因此我们可以简单连结 OpenGL Utility Toolkit 的函式库就可以达到我们的目地了。下面的编译参数跟上面的是同样效果
gcc test.c -o test -lGLU -lglut
接下来我们就可以来看看我们的结果,如果看到茶壶图片,代表成功了!
补充:
GLX 与显卡驱动
为了取得广泛的平台支持,OpenGL 是不依赖任何窗口系统的,但是我们使用 OpenGL 绘制的三维场景却需要嵌入在某种窗口程序中才可以为人所见。似乎也是约好了的,目前主流的窗口系统(X Window, MS Windows, Mac OS)只是提供了完善的二维图形交互环境,而将复杂的三维图形渲染任务交给 OpenGL (MS Windows 更热衷于用 Direct3D 来取代 OpenGL)。当 OpenGL 与窗口系统们达成了相互依存的默契之后,便出现了用于衔接 OpenGL 与窗口系统的扩展库,这些扩展库的主要目标就是实现OpenGL 图形与对应窗口画面之间的转换。GLX 库解决了 X Window 中的 OpenGL 图形渲染问题。同样的,WGL 和 AGL 库分别解决了 MS Windows 和 Mac OS 窗口系统中的 OpenGL 图形渲染问题。
GLX 像胶水一样,建立了 X Window、OpenGL 以及 3D 硬件加速驱动之间的联系。在 Linux 中,如果未有安装相应的支持 3D 加速的显卡驱动,那么 GLX 可以调用 Mesa (Unix-like 系统中应用最为广泛的 OpenGL 实现) 的 3D 软件加速来取得 X Window 与 OpenGL 的集成;当然,这种做法所实现的 3D 渲染效率就要大打折扣,并且也会累的
CPU 气喘。多了解一下 X Window 是如何驱动硬件 3D 加速,可以更加深刻的理解 GLX 的工作机理。不过,目前这方面的文档实在太少了,下面文字仅仅是我个人的猜测(和 galeki 有过一番议论),方家路过,还请指正。
目前,Nvidia 和 ATI 这两大主流显卡均面向 Linux 提供了驱动程序,但是它们的做法不相同。Nvidia 驱动提供了自己的 GLX 库,在安装驱动时,会替换掉 X Window 的标准 GLX 库,另外也会将 Mesa 提供的并且只具备 3D 软件加速支持的 libGL 库替换为自己的 libGL 库。Nvidia 驱动还会提供一个 Linux 内核模块,这样可以让 X Window 通过内核访问显卡的帧缓冲区。与 Nvidia 驱动相比, ATI 则显得比较规范(此处不论其驱动的质量优劣),它利用
DRI + Mesa 来实现 3D 硬件加速,而不是像 Nvidia 驱动那样,什么都是自己去实现。最近,ATI 的开源 3D 加速驱动也渐渐浮出水面,以后买显卡,得多考证考证 ATI 了。
GLX 的版本
目前,应该有 5 个版本,从 1.0 到 1.4,其中比较应用比较广泛的是版本是 1.2,GtkGLExt 所使用的 GLX 库就是这一版本(据说是为了获得跨平台支持不得己而为之)。Nvidia 180.27 提供的 GLX 版本是 1.4,至于 X Window 默认的 GLX 版本,我不清楚。GLX 是向后兼容的,因此,目前许多 X Window 程序使用 GLX 1.2 也是可以正常运行。GLX 1.3 是变动幅度比较大的版本,但是介绍它如何在编程中使用的文档很稀有。下面对一个 GLX1.2 的编程示例略作修改,权当 GLX 1.3 + Xlib 的编程实例,而至于该实现是否正确,不敢保证。
相关文章推荐
- 在Ubuntu 13.04下安装 OpenGL过程记录。
- Ubuntu 13.04 安装 OpenGL
- 在Ubuntu 13.04下安装 OpenGL过程记录。
- ubuntu13.04安装ati驱动
- SSD安装Ubuntu 13.04
- ubuntu下安装OpenGL [转]
- Ubuntu 安装 OpenGL
- Ubuntu下安装OpenGL 环境
- ubuntu 13.04 安装 chrome (软件源)
- Ubuntu 12.10安装OpenGL
- ubuntu13.04安装google-chrome-stable依赖问题
- Ubuntu13.04安装google-chrome-stable依赖问题: 依赖于 libudev0 (>= 147)
- 在Ubuntu下安装openGL
- ubuntu 安装 opengl
- ubuntu 13.04 安装 chrome (软件源)
- Ubuntu13.04安装CUDA5.0
- ubuntu 9.10 13.04 14.04 安装Seismic Unix步骤,亲测
- ubuntu 安装SDL及OpenGL
- ubuntu 12.04安装OpenGL
- Ubuntu13.04安装CUDA5.0