目錄
- 前言
- vtkRenderer
- 引入vtk視窗
- 小結
前言
一場疫情打亂了好多人的節奏,我也一樣,一不留神半年都快過去了,這期間雖說一直在鼓搗東西吧,不過確實是沒啥實質性的進展,索性就繼續把vtk的使用來完善下吧,
vtkRenderer
vtk的基類,也就是所有類基本繼承于vtkObjectBase,Renderer也是一樣,看下圖,其實看原始碼挺好的,可以學習學習別人的思想,借鑒下充實自己,

vtkRenderer個人理解就是個視窗渲染器,也是vtk的核心,沒了這玩意兒你沒法去操作你的vtkActor,你的vtkInteractorStyle也沒有掛載區域,具體的介紹也不多說,看資料看檔案吧(我也不會-,-||),
引入vtk視窗
在上一篇,工程到了能正常運行的地步,但是沒有引入vtk相關的,接下來就是把vtk視窗放置到自己的qt工程的時間了,

之前的配置中已經提到這個QVTKWidget,也就是vtk的視窗,至于怎么拖拖到哪看你自己,不會的可以先鼓搗下單純的qt吧,
保存之后,我們先來運行程式看下效果,如果不出意外的話會跟我這顯示的一樣,

我們來看下輸出的資訊,

vtk的新版本不再是QVTKWidget,也就是說這玩意兒沒了,一番找資料后發現,哦,原來是改名字了,新版本改成了QVTKOpenGLWidget,更改ui檔案后我們再來運行程式,

可以看到圖中的vtkOutputWindow,這個視窗是vtk內置的錯誤資訊彈框,也就是說有例外的時候回給你輸出資訊提示,但其實你在輸出一樣能看到只是沒有這個直觀而已,
回頭看這個例外資訊,也就是說沒有重寫vtkxxx,沒有系結事件機制什么的,我們在頭檔案加上下面這幾句,
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
錯誤是解決了,不過這個視窗黑壓壓的也不知道是干啥的,不用急我們來一段Demo,
vtkSmartPointer<vtkConeSource> coneSource =
vtkSmartPointer<vtkConeSource>::New();
coneSource->Update();
vtkSmartPointer<vtkPolyData> polyData =
https://www.cnblogs.com/AprilBlank/p/vtkSmartPointer::New();
polyData = coneSource->GetOutput();
vtkSmartPointer mapper =
vtkSmartPointer::New();
mapper->SetInputData(polyData);
vtkSmartPointer actor =
vtkSmartPointer::New();
actor->SetMapper(mapper);
vtkSmartPointer render =
vtkSmartPointer::New();
render->AddActor(actor);
render->SetBackground(0.3, 0.3, 0.3);
ui.qvtkWidget->GetRenderWindow()->AddRenderer(render);
vtkSmartPointer rwi =
vtkSmartPointer::New();
rwi->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());
rwi->Initialize();
接下來簡單介紹下上面這段的意思,首先我們要先了解下opengl,大致知道模型從點到面到成像的程序,opengl教程地址,
首先我們創建一個Source,也就是點,面資料,通過DataMapper整理映射,然后Actor是模型的物體,至于Renderer就不多說了,RenderWindowInteractor是事件互動集合,也就是默認的互動事件,
引入對應的頭檔案之后,運行專案,不出意外的話就是下面的效果,

小結
真是不看不知道,竟然大半年都快過去了,這個學習記錄好久也沒更新了,但是在這段時間鼓搗的東西確實不少,回頭整理整理,下一步先整理下vtkCamera這個相機的玩意兒,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27269.html
標籤:C++
上一篇:C++仿函式
下一篇:C++和C#的對比
