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.7\qwtplot3d,將會看到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.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\下面

          7、編譯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

 

         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.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生成的文件夾,要看一下你自己的生成的是不是這個位置)

 

   10、正確運行。看一下運行結果吧。

   實際的運行結果有多個,因為這個example里面有很多個例子,可以選擇運行哪個例子:

   

運行結果大家可以看阿科的博客,也可以自己嘗試,是出現不同的surface plot圖像。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM