首先不得不说,要感谢北京邮电大学的阿科。感谢他慷慨的分享和极具科学态度的记录,将本身搜集到的众多资料收集整理发布,拯救众多苦逼寻找方案的程序员于苦海之中。由于最近接手新的项目,涉及到使用opengl作surface plot编程。第一个想到的就是可否使用现有的开源API来完成这些工做。经过多方寻找,我发现了两个开源的project:php
1 qwtplot3d(http://qwtplot3d.sourceforge.net/web/navigation/feature_frame.html)html
2 Sapphire-3D-Surfaces(http://qt-apps.org/content/show.php/Sapphire+3D+Surfaces?content=118944)linux
注意这里我使用的开发环境是Qt,语言为C++。程序员
第二个下载源代码,再win7的Qt Creator一下就编译经过了。可是第一个却很艰难,因而各方寻找解决方案,最终在阿科的博客中找到了比较详细的解决方法,原文连接:(http://blog.csdn.net/qinpanke/article/details/8062517)web
阿科的方法基本是正确的,可是在细节上与个人实际实验结果有所不一样,我将以阿科的内容为基础,增长一些本身实际实验的内容。编程
一、从网上下载qwtplot3D的最新版本:http://qwtplot3d.sourceforge.net/app
二、解压qwtplot3d-0.2.7.zip到C盘根目录下(注意:路径中不能带有中文汉字)。ui
三、打开C:\qwtplot3d-0.2.7\qwtplot3d,将会看到qwtplot3d.pro文件。this
四、用QtCreator打开qwtplot3d.pro文件,并执行编译命令会出现以下以下错误:No rule to target 'Makefile.Debug'. Stop.以下图所示:.net
解决方法:
双击并打开上图左侧中的qwtplot3d.pro文件,修改该文件部份内容: win32:TEMPLATE= vclib 修改成: win32:TEMPLATE= lib
五、修改完成后,再次点击编译运行。会再次出现错误:'stderr' was not declared in this scope 和 'fprintf' was not declared in this scope。 以下图所示:
解决方法:
打开左侧Source》src》qwt3d_function.cpp文件。并在顶部添加语句:#include "stdio.h"
六、再次编译。便可顺利完成qwtplot3d工程的编译,不会再遇到错误。
(这个地方实际仍是会有错误的,会出现红色的输出提示“The process could not be started!”,可是已经生成了C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib目录下面的libqwtplot3d.a和qwtplot3d.dll,只要生成了就能够了,由上面的错误没有关系)
此时,打开C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib文件夹。会看到生成两个动态库文件:libqwtplot3d.a和qwtplot3d.dll。这就是编译好的qwtplot3d的动态库文件。做为开发而言,就能够直接使用。固然,咱们不只仅是但愿编译生成动态库,还但愿将qwtplot3d自带的Demo编译并运行经过。没问题,继续看下面的。
复制C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib文件夹到C:\qwtplot3d-0.2.7\qwtplot3d\下面
七、编译qwtplot3d自带的Demo程序。打开C:\qwtplot3d-0.2.7\qwtplot3d\examples文件夹。用QtCreator打开example.pro文件,点击编译运行,一样会出现No rule to target 'Makefile.Debug'. Stop的错误。这里须要修改的pro文件是common.pro文件。
解决方法:
打开common.pro文件。删除语句:TEMPLATE = vcapp和 QMAKE_LFLAGS += /NODEFAULTLIB:msvcrt
八、修改完成后,再次编译example.pro文件会出现 :: error: ../../lib/qwtplot3d.lib: No such file or directory 。(注意:也多是出现没法 make 的错误。其实也是这个缘由致使的,一样按照下面的修改方法也能够解决)
修改方法:
打开common.pro文件。修改语句:LIBS+= ../../lib/qwtplot3d.lib 修改成:LIBS+= ../../lib/libqwtplot3d.a(这里换成那个dll的动态连接库文件也是能够的,由于.a文件是linux下的动态连接库文件,而.dll是window下面的动态连接库文件)
九、修改完成后,再次编译example.pro文件就不会出现错误。可是,编译完成运行的时候出现:
Starting C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin\autoswitch.exe...
C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin\autoswitch.exe exited with code -1073741515
出现这个问题的缘由是动态库没有在example生成的可执行文件的目录下。
解决方法:
打开C:\qwtplot3d-0.2.7\qwtplot3d\lib文件夹,拷贝两个文件libqwtplot3d.a和qwtplot3d.dll。到文件夹:C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin。(注意:这是我example生成的文件夹,要看一下你本身的生成的是否是这个位置)
十、正确运行。看一下运行结果吧。
实际的运行结果有多个,由于这个example里面有不少个例子,能够选择运行哪一个例子:
运行结果你们能够看阿科的博客,也能够本身尝试,是出现不一样的surface plot图像。