1. 程式人生 > >VTK教程之一 視覺化管線

VTK教程之一 視覺化管線

VTK是一個基於面向物件的開源三維繪圖軟體包,和其它的的三維繪圖引擎如OSG、OGRE不同之處在於,VTK視覺化物件主要是各種資料,更加註重對資料分析處理後的視覺化,視覺化的內容是人們無法直接感受到的東西,如地質構造、地層分佈、礦床分佈、三維空間應力場的狀態變化等等,而OSG、OGRE是基於場景的視覺化,更強調視覺感官的感受,所以OSG主要應用於虛擬現實領域,而VTK主要應用於科學計算視覺化領域,本教程主要介紹VTK的視覺化應用。

       VTK的視覺化設計是基於管線流的設計模式,將要處理的資料作為流動介質在管線中流動,不同的階段對資料有不同的處理方式,VTK的視覺化管線主要由圖形模型和視覺化模型組成,如下圖所示:


84181a794cef7cb5353dc&690
 

 視覺化模型主要對資料進行處理,生成可被繪製的幾何體,而圖形模型主要對生成的幾何體進行繪製,在VTK的視覺化管線中所包含的物件一般包括:源物件、過濾器物件(可選)、對映器物件、Props物件、繪製器物件、繪製視窗,其中 源物件、過濾器物件(可選)、對映器物件 、繪製器物件、繪製視窗為處理物件, Props物件為資料物件,對映器物件是視覺化模型和圖形模型的介面。

     有了視覺化管線,VTK的視覺化過程就可以用資料在視覺化管線流動的過程來描述(資料在管線中流動過程中,被管線不同的物件處理,最終以圖形的方式表現資料資訊),VTK的視覺化管線具有如下特點:

1、變換

資料從原始的形式變換成圖元的形式,最終以圖形的形式顯示。

2、表現

用VTK內部定義的資料結構描述資料,形成資料集,用圖形的方式表現資料。

3、是基於面向物件的

       用面向物件的觀點描述視覺化管線,表現是資料物件,變換是處理物件。

      下面我們對VTK視覺化管線的各個物件分別介紹,在視覺化管線中,按對資料處理方式的不同,分為資料物件和處理物件,其中資料物件主要作用是表現資料資訊,並對錶現的資訊進行維護(建立、訪問、刪除),處理物件主要是對輸入的資料進行處理後生成輸出新的資料,處理物件主要包括:

1、源物件

       資料生成的源頭,資料來源主要包括從磁碟讀取資料檔案,如VTK所支援的各種格式檔案生成資料來源物件,這種源物件被稱為讀源物件,或者利用數學方法生成源物件,如利用多個四邊形構建一個圓柱體,這種物件被稱為程式源物件。

2、過濾器物件

      對源物件進行處理,生成新的資料集輸出。

3、對映器物件

     對映器物件主要作用是將視覺化模型生成的資料轉換到圖形模型進行繪製,或者以磁碟檔案的形式進行輸出。

以上對VTK視覺化管線做了一個簡單的介紹,下面通過一個示例程式來說明資料是如何在視覺化管線中流動的。

#include "stdafx.h"
#include "vtkCamera.h"
#include "vtkGenericRenderWindowInteractor.h"
#include "vtkInteractorStyleJoystickCamera.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkLODActor.h"
#include "vtkLight.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkPropPicker.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkSTLReader.h"
#include "vtkShrinkPolyData.h"
 

int main( int argc, char *argv[] ) {
  /建立繪製器物件
   vtkRenderer *ren1 = vtkRenderer::New();
  /設定相機
   ren1->GetActiveCamera()->SetClippingRange(0.294421 , 29.4421);
   ren1->GetActiveCamera()->SetDistance(7.94348);
   ren1->GetActiveCamera()->SetFocalPoint(-66.9367 , -49.4539 , 258.453);
   ren1->GetActiveCamera()->SetPosition(-67.8091 , -57.3489 , 258.377);
   ren1->GetActiveCamera()->SetViewAngle(20);
   ren1->GetActiveCamera()->SetViewUp(-0.82718 , 0.0860684 , 0.555306);
   ren1->GetActiveCamera()->SetParallelProjection(0);
   ren1->GetActiveCamera()->SetUseHorizontalViewAngle(0);
   ren1->SetBackground(0.1 , 0.2 , 0.4);
   ren1->SetLightFollowCamera(1);
  /建立繪製視窗
   vtkRenderWindow *renWin = vtkRenderWindow::New();
   renWin->AddRenderer(ren1);
   renWin->SetSize(1134 , 624);
  /建立互動器
   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
   iren->SetRenderWindow(renWin);
   iren->SetLightFollowCamera(1);
  /讀源物件讀取stl資料檔案
   vtkSTLReader *part = vtkSTLReader::New();
   part->SetOutput(part->GetOutput());
   part->SetFileName("42400-IDGH.stl");
  /建立過濾器物件,該物件將輸入資料集的每個單元向單元質心收縮
  /將會導致相鄰單元之間出現裂縫
   vtkShrinkPolyData *shrink = vtkShrinkPolyData::New();
  /將源物件和過濾器連線
   shrink->SetInput((vtkPolyData *) part->GetOutput());
  /設定收縮係數,如果為1,不收縮
   shrink->SetShrinkFactor(0.9);
  /建立對映器物件
   vtkPolyDataMapper *partMapper = vtkPolyDataMapper::New();
   partMapper->SetInput((vtkPolyData *) shrink->GetOutput());
   partMapper->SetNumberOfPieces(1);
   partMapper->SetScalarRange(0 , 1);
   partMapper->SetColorMode(0);
   partMapper->SetResolveCoincidentTopology(0);
   partMapper->SetScalarMode(0);
   partMapper->SetImmediateModeRendering(0);
   partMapper->SetScalarVisibility(1);
   partMapper->SetUseLookupTableScalarRange(0);
  /建立Props物件(Actor)
   vtkLODActor *partActor = vtkLODActor::New();
   partActor->SetMapper(partMapper);
   partActor->GetProperty()->SetAmbientColor(0.8275 , 0.8275 , 0.8275);
   partActor->GetProperty()->SetColor(0.8275 , 0.8275 , 0.8275);
   partActor->GetProperty()->SetDiffuseColor(0.8275 , 0.8275 , 0.8275);
   partActor->GetProperty()->SetOpacity(1);
   partActor->GetProperty()->SetInterpolation(1);
   partActor->GetProperty()->SetRepresentation(2);
   partActor->GetProperty()->SetBackfaceCulling(0);
   partActor->GetProperty()->SetEdgeVisibility(0);
   partActor->GetProperty()->SetFrontfaceCulling(0);
   partActor->SetOrigin(0 , 0 , 0);
   partActor->SetPosition(0 , 0 , 0);
   partActor->SetScale(1 , 1 , 1);
   partActor->SetVisibility(1);
  /將Actor物件新增到繪製器中
   ren1->AddActor( partActor );
  /繪製
   ren1->ResetCamera();
   ren1->ResetCameraClippingRange();
   renWin->Render();
   iren->Initialize();
   iren->Start();
  /刪除物件
   iren->Delete();
   part->Delete();
   partActor->Delete();
   partMapper->Delete();
   ren1->Delete();
   renWin->Delete();
   shrink->Delete();
   return 0;
}

相關推薦

VTK教程之一 視覺管線

VTK是一個基於面向物件的開源三維繪圖軟體包,和其它的的三維繪圖引擎如OSG、OGRE不同之處在於,VTK視覺化物件主要是各種資料,更加註重對資料分析處理後的視覺化,視覺化的內容是人們無法直接感受到的東西,如地質構造、地層分佈、礦床分佈、三維空間應力場的狀態變化等等,而OSG、OGRE是基於場景的視覺化,

BCGControlBar教程視覺管理器

BCGControlBar Pro for MFC最新試用版下載請猛戳>>> BCGControlBar庫框架允許您建立各種應用程式“skins”並輕鬆更改使用者介面元素的外觀。雖然該產品具有超過25個預先構建的視覺主題,但您可以輕鬆實現自定義主題。 在下圖中,您可以看到從“B

tensorflow基本教程6:視覺結果

#如何建立神經網路的結構:層 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt def add_layer(inputs,in_size,out_size,activation_function=

mac 新建VTK和ITK工程:讀mhd 或 mha 實現3D視覺

****只要會其中一個,另外的也就不難理解了。**** 以新建VTK為例: 1、首先確保已經安裝VTK; 2、在VTK目錄下新建一個資料夾Mycode; 3、Mycode裡面新建 .cpp檔案,cmakelist.txt檔案;(這裡是我們的原碼) 4、Mycode裡

《wiki官網教程》 4 視覺與除錯工具

一、儲存和回放資料 1、錄製資料(通過建立一個bag檔案) 記錄ROS系統執行時的話題資料,記錄的話題資料將會累積儲存到bag檔案中。 1、Terminal 1: $ roscore Terminal 2: $ rosrun turtlesim turtlesim_node

Tensorflow學習教程------tensorboard網路執行和視覺

tensorboard可以將訓練過程中的一些引數視覺化,比如我們最關注的loss值和accuracy值,簡單來說就是把這些值的變化記錄在日誌裡,然後將日誌裡的這些資料視覺化。 首先執行訓練程式碼 #coding:utf-8 import tensorflow as tf from

Matplotlib 資料視覺-基本使用教程

一. Matplotlib 基本概念 Matplotlib是python的一個數據視覺化工具庫。 特點:專門用於開發2D圖表(包括3D圖表), 操作簡單。 視覺化是在整個資料探勘的關鍵輔助工具,可以清晰的理解資料,從而調整我們的分析方法。 二. Matplotlib三層結構

Python進行資料視覺分析快速教程例項

Jupyter Notebook介紹 Jupyter Notebook是一個互動式筆記本,支援執行 40 多種程式語言。IPython notebook 是一個基於 IPython REPL 的 web 應用,安裝 IPython 後在終端輸入 ipython notebook 即可啟動服務。j

PCL點雲處理視覺——法向顯示錯誤“no override found for vtk actor”解決方法

一、環境 Win10 X64 VS2015 PCL1.8.0AllinOne 二、程式碼 #include "stdafx.h" #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #inc

Ceisum官方教程3 -- 空間資料視覺

原文地址:https://cesiumjs.org/tutorials/Visualizing-Spatial-Data/這篇教程教你如何使用Cesium的Entity API去繪製空間資料,如點,圖示,文字標註,折線,模型,圖形和立體圖形。雖然這章不需要什麼前提,但是如果你對Cesium一無所知,最好從第一

資料視覺是目前最牛逼的行業之一!這些必學庫你會幾個呢?

推薦   資料視覺化的庫有挺多的,這裡推薦幾個比較常用的: Matplotlib   Plotly   Seaborn   Ggplot   Bokeh   Py

Elastic Stack實戰學習教程~日誌資料的收集、分析與視覺

Elastic Stack介紹 近幾年,網際網路生成資料的速度不斷遞增,為了便於使用者能夠更快更精準的找到想要的內容,站內搜尋或應用內搜尋成了不可缺少了的功能之一。同時,企業積累的資料也再不斷遞增,對海量資料分析處理、視覺化的需求也越來越高。 在這個領域裡,開源專案ElasticSearch贏得了市場的關

Git視覺教程——Git Gui的使用(轉)

在Git簡介一文中已經對Git進行了簡單的介紹,但是理論知識過於枯燥,加上本人專業知識不夠紮實,使得初學者在Git的使用上還是會有很大的困難。雖然我更推薦使用Git Bash方式對Git進行操作,但是對於大部分只是想簡單地使用一下Git進行版本控制和團隊開發的朋友而言,仍然更

mysql-5.6.41-winx64安裝教程、使用及Navicat_Premium視覺sql的使用

安裝步驟 https://www.cnblogs.com/Pusteblume/p/9705153.html Windows 無法啟動MySql服務 (位於 本地計算機上)錯誤2: 系統找不到指定的檔案 https://blog.csdn.net/write

TensorFlow入門教程:4:視覺tensorboard

Tensorboard在pip中顯示的概要資訊是”lets you watch Tensors Flow“,watch tensors的flow就是Tensorboard所要做的視覺化的主要功能。一般用於確認tensorflow模型訓練過程的視覺化。 概要資訊

TensorFlow入門教程:12:訓練結果的視覺分析

上篇文章模擬了線性迴歸下的訓練的過程,並演示了訓練後的線性模型對資料的適應程度,同時使用視覺化的方式看到了結果的顯示,在學習的過程中,合理利用諸如matplotlib等庫函式,可以非常有效地對結果進行

TensorFlow入門教程:13:訓練過程的視覺分析

活用視覺化的結果,使用真正的人類智慧,可以一目瞭然的瞭解的演算法過程中的大致過程,這就是視覺化可以帶來的結果,在機器學習結果的展示上,能畫出來的就儘量不要以數字的形式print出來,這篇文章繼續分析y=3*x + 1的收斂過程,這裡我們來使用圖形化的方式來體驗

VARCHART XGantt系列教程:如何提高甘特圖視覺表現

  VARCHART XGantt是一款功能強大的甘特圖控制元件。其模組化的設計讓您可以建立滿足您和您的客戶所需求的應用程式(我們領先的甘特圖控制元件VARCHART XGantt可用於.NET,ActiveX和ASP.NET應用程式)。VARCHART XGantt可以快速、簡單地整

視覺圖表入門教程講解

資料視覺化,即通過圖表形式展現資料,幫助我們快速、準確理解資訊。好的視覺化會“講故事”,能向我們揭示資料背後的規律。 本文主要介紹常見圖表的資訊表達特徵和適用場景,幫助大家瞭解如何在不同的場景下選擇合適的圖表,從而幫助我們更清晰的傳遞資訊。(注:正文中所有圖表的製作所使用的

Seaborn中文教程(一):視覺變數間的關係

眾所周知,Seaborn“可能”是Python下最友好、易用的視覺化工具了,視覺化效果也非常好。但是截止目前,並沒有一份中文教程供廣大國內Python使用者查閱學習。怎麼能因為語言的問題,讓大家錯過這麼好用的一個視覺化工具呢? 思考再三,我決定花一些時間將官方的英文文件整理出來,為大