zoukankan      html  css  js  c++  java
  • qt 3d 绘图

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

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

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

    注意这里我使用的开发环境是Qt,语言为C++。

    第二个下载源代码,再win7的Qt Creator一下就编译通过了。但是第一个却很艰难,于是各方寻找解决方案,最终在阿科的博客中找到了比较详细的解决方法,原文链接:(http://blog.csdn.net/qinpanke/article/details/8062517)

    阿科的方法基本是正确的,但是在细节上与我的实际实验结果有所不同,我将以阿科的内容为基础,增加一些自己实际实验的内容。

              1、从网上下载qwtplot3D的最新版本:http://qwtplot3d.sourceforge.net/

              2、解压qwtplot3d-0.2.7.zip到C盘根目录下(注意:路径中不能带有中文汉字)。

              3、打开C:qwtplot3d-0.2.7qwtplot3d,将会看到qwtplot3d.pro文件。

              4、用QtCreator打开qwtplot3d.pro文件,并执行编译命令会出现如下如下错误:No rule to target 'Makefile.Debug'.  Stop.如下图所示:

             

              

              解决方法:

              双击并打开上图左侧中的qwtplot3d.pro文件,修改该文件部分内容:  win32:TEMPLATE= vclib   修改为: win32:TEMPLATE= lib

              

              5、修改完成后,再次点击编译运行。会再次出现错误:'stderr' was not declared in this scope  和  'fprintf' was not declared in this scope。 如下图所示:

              

               解决方法:

               打开左侧Source》src》qwt3d_function.cpp文件。并在顶部添加语句:#include "stdio.h"

               

               6、再次编译。即可顺利完成qwtplot3d工程的编译,不会再遇到错误。

               (这个地方实际还是会有错误的,会出现红色的输出提示“The process could not be started!”,但是已经生成了C:qwtplot3d-0.2.7qwtplot3d-build-desktoplib目录下面的libqwtplot3d.a和qwtplot3d.dll,只要生成了就可以了,由上面的错误没有关系)

              此时,打开C:qwtplot3d-0.2.7qwtplot3d-build-desktoplib文件夹。会看到生成两个动态库文件:libqwtplot3d.a和qwtplot3d.dll。这就是编译好的qwtplot3d的动态库文件。作为开发而言,就可以直接使用。当然,我们不仅仅是希望编译生成动态库,还希望将qwtplot3d自带的Demo编译并运行通过。没问题,继续看下面的。

              复制C:qwtplot3d-0.2.7qwtplot3d-build-desktoplib文件夹到C:qwtplot3d-0.2.7qwtplot3d下面

              7、编译qwtplot3d自带的Demo程序。打开C:qwtplot3d-0.2.7qwtplot3dexamples文件夹。用QtCreator打开example.pro文件,点击编译运行,同样会出现No rule to target 'Makefile.Debug'.  Stop的错误。这里需要修改的pro文件是common.pro文件。

              解决方法:

              打开common.pro文件。删除语句:TEMPLATE = vcapp和 QMAKE_LFLAGS += /NODEFAULTLIB:msvcrt

             8、修改完成后,再次编译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下面的动态链接库文件)

            9、修改完成后,再次编译example.pro文件就不会出现错误。但是,编译完成运行的时候出现:

             Starting C:qwtplot3d-0.2.7qwtplot3dexamples-build-desktopinautoswitch.exe...

             C:qwtplot3d-0.2.7qwtplot3dexamples-build-desktopinautoswitch.exe exited with code -1073741515

            出现这个问题的原因是动态库没有在example生成的可执行文件的目录下。

        解决方法:

        打开C:qwtplot3d-0.2.7qwtplot3dlib文件夹,拷贝两个文件libqwtplot3d.a和qwtplot3d.dll。到文件夹:C:qwtplot3d-0.2.7qwtplot3dexamples-build-desktopin。(注意:这是我example生成的文件夹,要看一下你自己的生成的是不是这个位置)

       10、正确运行。看一下运行结果吧。

       实际的运行结果有多个,因为这个example里面有很多个例子,可以选择运行哪个例子:

       

    运行结果大家可以看阿科的博客,也可以自己尝试,是出现不同的surface plot图像。

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4371519.html
Copyright © 2011-2022 走看看