首先不得不說,要感謝北京郵電大學的阿科。感謝他慷慨的分享和極具科學態度的記錄,將本身蒐集到的衆多資料收集整理髮布,拯救衆多苦逼尋找方案的程序員於苦海之中。由於最近接手新的項目,涉及到使用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圖像。