現(xiàn)在的網(wǎng)站開發(fā)用什么技術免費域名申請網(wǎng)站大全
?(1)包含文件配置:
????????項目--屬性--VC++目錄,在包含目錄中把include文件夾的地址加進去,一直要到下一級 vtk-9.3目錄下,
?小知識:? 在Visual Studio 2019中運行項目時,如果項目中使用了第三方庫,需要配置VC++目錄中的包含目錄,將第三方庫的include文件夾地址加入其中。這是因為第三方庫通常包含了一些頭文件,這些頭文件包含了庫的聲明和定義,如果不將其包含在項目中,編譯器將無法找到這些頭文件,導致編譯錯誤。
????????通過在項目屬性中配置VC++目錄,將第三方庫的include文件夾地址加入其中,可以告訴編譯器在編譯項目時去哪里查找這些頭文件,從而解決編譯錯誤并成功使用第三方庫。這樣配置可以確保項目能夠正確地引用和使用第三方庫的功能,使得項目的開發(fā)和運行更加順利和高效。
(2)?在庫目錄中,把lib文件夾的地址加進去:
?
小知識:
????????在Visual Studio 2019中運行項目時,如果項目中使用了第三方庫,需要配置VC++目錄中的庫目錄,將第三方庫的lib文件夾地址加入其中。這是因為第三方庫通常包含了編譯后的庫文件(.lib文件),這些庫文件包含了庫的實現(xiàn)代碼和函數(shù)定義。
????????通過在項目屬性中配置VC++目錄,將第三方庫的lib文件夾地址加入其中,可以告訴鏈接器在鏈接項目時去哪里查找這些庫文件,從而成功地將第三方庫的功能鏈接到項目中。如果不將庫目錄配置正確,鏈接器將無法找到相應的庫文件,導致鏈接錯誤和無法正常運行項目。
? ? ? 因此,配置庫目錄是確保項目能夠正確鏈接并使用第三方庫的關鍵步驟,使得項目的開發(fā)和運行更加順利和高效。
(3)?然后在 鏈接器--輸入--附加依賴項中加入靜態(tài)庫 lib的依賴項:
小知識:
????????在Visual Studio 2019中運行項目時,如果項目中使用了第三方庫的靜態(tài)庫(.lib文件),需要在鏈接器的輸入中添加這些靜態(tài)庫的依賴項。這是因為靜態(tài)庫包含了庫的實現(xiàn)代碼和函數(shù)定義,而在鏈接階段需要將這些代碼和函數(shù)鏈接到項目中。
????????通過在項目屬性中配置鏈接器的輸入,添加靜態(tài)庫的依賴項,可以告訴鏈接器在鏈接項目時需要使用哪些靜態(tài)庫,從而成功地將第三方庫的功能鏈接到項目中。如果不添加靜態(tài)庫的依賴項,鏈接器將無法找到相應的靜態(tài)庫,導致鏈接錯誤和無法正常運行項目。
????????因此,配置靜態(tài)庫的依賴項是確保項目能夠正確鏈接并使用第三方庫的關鍵步驟,使得項目的開發(fā)和運行更加順利和高效。
小知識:
? ? ? ?那么為什么?: 配置了:項目--屬性--VC++目錄,還要配置:鏈接器--輸入--附加依賴項中加入靜態(tài)庫 lib的依賴項
? ? ? ?回答:? ? ?配置了項目屬性中的VC++目錄,將庫目錄中的lib文件夾的地址加入后,可以讓編譯器在編譯時找到第三方庫的頭文件(.h文件),以便正確識別和編譯項目中對第三方庫的引用。
????????然而,僅僅配置了VC++目錄并不能告訴鏈接器在鏈接時需要使用哪些靜態(tài)庫。因此,需要在鏈接器的輸入中添加靜態(tài)庫的依賴項,以告訴鏈接器在鏈接項目時需要使用哪些靜態(tài)庫,從而成功地將第三方庫的功能鏈接到項目中。
????????總結而言,配置VC++目錄可以讓編譯器找到第三方庫的頭文件,而配置鏈接器的輸入可以告訴鏈接器在鏈接時需要使用哪些靜態(tài)庫。這兩個步驟結合起來,能夠確保項目能夠正確鏈接并使用第三方庫的功能。
(4)copy 一份例子看是否可以運行
#include "cylinderExaple.h"#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
int main(int argc, char* argv) {/**(1) vtkCylinderSource該類派生自 vtkPolyDataAlgorithm。顧名思義,vtkCylinderSource 生成的數(shù)據(jù)類型就是vtkPolyData,它主要是生成一個中心在渲染場景原點的柱體,柱體的長軸沿著Y軸,柱體的高度、截面半徑等都可以任意指定。vtkCylinderSource::SetHeight():設置柱體的高。vtkCylinderSource:SetRadius():設置柱體橫截面的半徑。vtkCylinderSource::SetResolution(): 設置柱體橫截面的等邊多邊形的邊數(shù)。轉動一下柱體,然后數(shù)一數(shù)柱體橫截面有多少條邊,應該就能明白這個參數(shù)所表示的意思。**/vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();cylinder->SetHeight(3.0);cylinder->SetRadius(1.0);cylinder->SetResolution(10);/**(2)vtkPolyDataMapper該類用于渲染多邊形幾何數(shù)據(jù) (vtkPolyData),派生自類vtkMapper,將輸入的數(shù)據(jù)轉換為幾何圖元(點、線、多邊形)進行染。vtkPolyDataMapper::SetInputConnection();VTK可視化管線的輸入數(shù)據(jù)接口,對應的可視化管線的輸出數(shù)據(jù)接口為 GetOutputPort();VTK 5.0之前的版本使用 SetInput0和 GetOutput0)作為輸入輸出接口,VTK5X版本保留了對這兩個接口的支持。**/vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());/**(3) vtkActor該類派生自 vtkProp 類,渲染場景中數(shù)據(jù)的可視化表達通過 vtkProp 的子類負責。比如該示例要渲染一個柱體,柱體的數(shù)據(jù)類型是 vtkPolyData,數(shù)據(jù)要在場景中渲染時,不是直接把數(shù)據(jù)加入渲染場景,而是以 vtkProp 的形式存在于染場景中。三維空間中渲染對象最常用的vtkProp 子類有 vtkActor (表達場景中的幾何數(shù)據(jù))和 vtkVolume(表達場景中的體數(shù)據(jù));二維空間中的數(shù)據(jù)則是用 vtkActor2D 表達:vtkProp 子類負責確定染場景中對象的位置、大小和方向等信息;Prop 依賴于兩個對象:一個是 Mapper (vtkMapper)對象,負責存放數(shù)據(jù)和渲染信息;另一個是屬性(vtkProperty)對象,負責控制顏色、不透明度等參數(shù)。另外vtkActor 中還可以設置紋理(vtkTexture)對象,用于紋理貼圖。VTK 定義了大量的 Prop 類,如 vtkImageActor (負責圖像顯示)和vtkPieChartActor (用于創(chuàng)建數(shù)組數(shù)據(jù)的餅圖可視化表達形式)。其中有些 Prop 內(nèi)部直接包括了控制顯示的參數(shù)和待渲染數(shù)據(jù)的索引,因此并不需要額外的 Property 和 Mapper 對象,例如 vtkAxisActor。vtkActor 的子類 vtkFollower 可以自動更新方向信息使其始終面向一個特定的相機,這樣無論怎樣旋轉該對象都是可見的,例如三維場景中的廣告板或者文本。vtkActor 的子類vtkLODActor 可以自動改變自身的幾何表達形式來實現(xiàn)所需的交互幀率。vtkAssembly建立了各個Actor 的層次結構以便在整個結構平移、旋轉或縮放等變換時能夠更合理地進行控制。vtkActor::SetMapper(): 該方法用于設置生成幾何圖元的 Mapper,即連接一個Actor 到可視化管線的末端 (Mapper 是可視化管線的末端)。關于可視化管線的內(nèi)容可參考 2.4.2 節(jié)的內(nèi)容**/vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper(cylinderMapper);/**(5) vtkRenderer 負責管理場景的渲染過程。組成場景的對象包括 Prop,照相機 (kCamera)和光照(vtkLight)都被整合到一個 vtkRenderer 對象中。一個 vtkRenderWindow 中可以有多個vtkRenderer對象,而這些 vtkRenderer 可以染在窗口不同的矩形區(qū)域中(即視口)或者覆蓋整個窗口區(qū)域。vtkRenderer::AddActor(): 該方法用于將 vtkProp 類型的對象添加到渲染場景中。vtkRenderer::SetBackground(): 該方法是從 vtkRenderer 的父類 vtkViewport 繼承的,用于設置渲染場景的背景顏色,用R、G、B 的格式設置,三個分量的取值為 0.0~1.0。 (0.0,0.0.0.0)為黑色,(1.0,1.0,1.0)為白色。除了可以設置單一的背景顏色之外,還可以設置漸變的背景顏色,vtkViewport::SetBackground2()用于設置漸變的另外一種顏色,但是要使背景顏色漸變生效或者關閉,必須調(diào)用以下的方法。vtkViewport::SetGradientBackground(bool):參數(shù)為0時,關閉,反之,打開。vtkViewport::GradientBackgroundOn():該方法用于打開背景顏色漸變效果,相當于調(diào)用方法SetGradientBackground(1)。vtkViewport::GradientBackgroundOff(0): 該方法用于關閉背景顏色漸變效果。相當于調(diào)用方法 SetGradientBackground(0)。**/vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(cylinderActor);renderer->SetBackground(0.1, 0.2, 0.4);/**(4)vtkRenderWindow將操作系統(tǒng)與VTK渲染引擎連接到一起不同平臺下的vtkRenderWindow子類負責管理本地計算機系統(tǒng)中窗口創(chuàng)建和渲染過程。當使用VTK 開發(fā)應用程序時,只需要使用平臺無關的vtkRendererWindow類,運行時,系統(tǒng)會自動替換為平臺相關的 vtkRendererWindow 子類比如,Windows 下運行上述的 VTK 程序,實際創(chuàng)建的是 vtkWin320penGLRenderWindow(vtkRenderWindow 的子類)對象。vtkRenderWindow 中包含了 vtkRenderer 集合、渲染參數(shù)如立體顯示(Stereo)、反走樣、運動模糊(Motion Blur)和焦點深度 (Focal Depth)等。vtkRenderWindow::AddRenderer():該方法用于加入 vtkRenderer 對象。vtkRenderWindow::SetSize0: 該方法是從 vtkRenderWindow 的父類vtkWindow 繼承過來的,用于設置窗口的大小,以像素為單位。**/vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(renderer);renWin->SetSize(300, 300);/**6)vtkRenderWindowInteractor 提供平臺獨立的響應鼠標、鍵盤和時鐘事件的交互機制,通過 VTK 的觀察者/命令模式(請參考本書第 8 章內(nèi)容)將監(jiān)聽到的特定平臺的鼠標、鍵盤和時鐘事件交由vtkInteractorObserver 或其子類,如 vtkInteractorStyle 進行處理。vtkInteractorStyle 等監(jiān)聽這些消息并進行處理以完成旋轉、拉伸和縮放等運動控制。vtkRenderWindowInteractor 會自動建立一個默認的3D 場景交互器樣式(Interactor Style):vtkInteractorStyleSwitch,當然也可以選擇其他交互器樣式或者創(chuàng)建自己的交互器樣式,如本例中使用的 vtkInteractorStyleTrackballCamera。vtkRenderWindowInteractor:SetRenderWindow(): 該方法用于設置染窗口,消息是通過渲染窗口捕獲到的,所以必須給交互器對象設置渲染窗口。vtkRenderWindowInteractor::SetInteractorStyle0): 該方法用于定義交互器樣式,默認的交瓦器樣式為vtkInteractorStyleSwitch。vtkRenderWindowInteractor::Initialize():該方法表示為處理窗口事件做準備,交互器工作之前必須先調(diào)用這個方法進行初始化。vtkRenderWindowInteractor::Start();該方法表示開始進入事件響應循環(huán),交互器處于等待狀態(tài),等待用戶交互事件的發(fā)生。進入事件響應循環(huán)之前必須先調(diào)用 Initialize0方法。**/vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);/**(7)vtkInteractorStyleTrackballCamera交互器樣式的一種。該樣式下,用戶通過控制相機對物體作旋轉、放大、縮小等操作。打個比方,在照相時如果要想物體拍起來顯得大一些,可以采取兩種做法:第一種做法是相機不動,讓要拍的物體靠近相機;第二種做法是物體不動,讓相機靠近物體。第二種做法就是 vtkInteractorStyleTrackballCamera 的風格。其父類為 vtkInteractorStyle,除了 vtkInteractorStyleTrackballCamera之外,VTK 還定義了其他多種交互器樣式,如vtkInteractorStylelmage,主要用于顯示二維圖像時的交五**/vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera> ::New();iren->SetInteractorStyle(style);iren->Initialize();iren->Start();return 0;}
運行結果:
?送雞湯:無論你有多笨,只要肯堅持,都能達到你的目標。