qt 3d 绘图

首先不得不说,要感谢北京邮电大学的阿科。感谢他慷慨的分享和极具科学态度的记录,将本身搜集到的众多资料收集整理发布,拯救众多苦逼寻找方案的程序员于苦海之中。由于最近接手新的项目,涉及到使用opengl作surface plot编程。第一个想到的就是可否使用现有的开源API来完成这些工做。经过多方寻找,我发现了两个开源的project:php

1 qwtplot3d(http://qwtplot3d.sourceforge.net/web/navigation/feature_frame.htmlhtml

2 Sapphire-3D-Surfaces(http://qt-apps.org/content/show.php/Sapphire+3D+Surfaces?content=118944linux

注意这里我使用的开发环境是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图像。