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图像。

  • 相关阅读:
    Entity Framework 教程
    C# yield
    表达式树系列文章汇总
    C#中静态与非静态方法比较
    谈谈对Spring IOC的理解
    工厂方法模式与IoC/DI
    通过配置的方式Autofac 《第三篇》
    Autofac 组件、服务、自动装配 《第二篇》
    Autofac 解释第一个例子 《第一篇》
    SQL Server索引调优系列
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4371519.html
Copyright © 2011-2022 走看看