最近用到qwt插件,为linux下qt图形开发添加该插件,使用qtc对qwt进行编译,qwt有关于opengl的编译选项。虽说,现在已经能在qt creator下跑 提供交互功能、涵盖opengl 接口的程序了,但还是有些观点不太清楚。以下是小弟的拙见,真诚希望高人能给予指正!
下列引自作者:http://www.qtcn.org/bbs/read-htm-tid-31973.html
1、OpenGL全称为 open Graphcis Library开放的图形(设备)接口,这些库在计算机的底层,显卡要绘制一些三维、二维图形的时候,需要调用对应的 底层opengl库的相关函数;(这些函数很复杂,大概说只有有120来个,它们之间组合后可以完成很多绘制二维、三维图形的功能)2、为了让编程人员能够更好地识别代码,gl.h、glu.h(及其对应的库文件)对底层的opengl进行了封装,提供了一些程序员易使用的API接口。
3、OpenGL一般只负责处理图形的绘制、变换等功能,很少提供与用户交互的接口,与当下的 GUI 设计不匹配,因此针对不同的运行平台,又进一步封装了诸如 glut、glx等opengl库文件包。而在qt库中,同样为opengl库提供了类似于glut的Qt Opengl模块,它封装了很多类库,诸如QGLWidget类。
4、glut、glx都要使用到glu、gl库,qt的Qt OpenGL 模块同样要在含有gl、glu库的基础上使用。在Qt的安装过程中,如果安装时没有检测到系统中已安装有glu、gl库,那么Qt将认为该用户不会使用到QtOpenGL库,QtOpenGL将不被安装。也就是说,如果要用Qt中的Qt OpenGL模块来进行opengl编程,那么在安装Qt库之前,就应该把opengl库(使得要含有glu\gl文件在usr/include目录下)给安装好。查阅qt手册,原话:When you install Qt for X11, the configure script will autodetect if OpenGL headers and libraries are installed on your system, and if so, it will include the QtOpenGL module in the Qt library. (If your OpenGL headers or libraries are placed in a non-standard directory, you may need to change the QMAKE_INCDIR_OPENGL and/or QMAKE_LIBDIR_OPENGL in the config file for your system).
一些概念的主观理解:
1. 所谓的 opengl 的底层库,底层api,就是 gl.h 中的这些函数
2. glu.h 是工具函数库(它是对gl.h 某些操作的封装)。
3. glx.h 这是另一层层面的东西。opengl是窗口系统的补充,可用于不同的窗口系统,各种窗口系统都通过某种扩展来支持opengl。如果你要用于 X11,则需要 glx;如果用于苹果机,则需要agl;如果用于windows,则需要wgl;如果...
4. glut 就是供学习用的一个工具集,它对glx、agl、wgl等进行了封装,以使得你可以在不同的窗口系统下写同样的代码来学习opengl。
5. QtOpenGL 与glut 比较类似,但glut只是个玩具,而QtOpenGL却是可以开发重量级商业程序的opengl的封装。
以上总共有四点,最后一个也是之前困扰了我很久的一个东西,隐藏的太深了,因为这个问题,qwt在qtc中编译会提示qgl.h文件不存在。在qt安装目录的头文件中QtGui、QtCore、QtSql等模块都装了,可唯独这个QtOpengl没给装上。也尝试过将qwt的.pro添加了glut和gl的支持,另外将程序中对gql头文件的引用替换为gl,但可能仍未正确操作,最后也没能解决问题,还希望各位朋友能不吝指导。
按照最后的一点说明,通过重新编译安装了Qt库,就发现可以跑含有QtOpenGL的程序了,qwt也可以顺利编译了。