1. 程式人生 > >VTK學習之路——畫畫我的小蘋果

VTK學習之路——畫畫我的小蘋果

sdn cell 技術 圖形系統 img 實體 旋轉 insert name

數據集主要由描寫敘述數據集幾何形狀的點集數據及構成數據集的單元構成,因此構建數據集的主要任務就是確定點集和構建單元,本演示樣例程序構建了一個蘋果的實體,然後繪制蘋果。演示樣例程序運行的過程例如以下:
1、首先確定蘋果外輪廓的控制點。形成點集。


2、構建一個線單元。


3、構建多邊形數據。把這些點集連接起來繪制一條線。
4、採用壓制過濾器旋轉輪廓線,構成蘋果的表面實體。
5、繪制蘋果

演示樣例程序的代碼例如以下:

#include "stdafx.h"
#include <vtkPoints.h>
#include <vtkSmartPointer.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRotationalExtrusionFilter.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int _tmain(int argc, _TCHAR* argv[])
{
     //定義蘋果輪廓線的點坐標
    vtkSmartPointer<vtkPoints>pPoints=vtkPoints::New();
    pPoints->InsertPoint(0,0.0,0.0,1.5);
    pPoints->InsertPoint(1,1.0,0.0,1);
    pPoints->InsertPoint(2,2.0,0.0,1.5);
    pPoints->InsertPoint(3,3.0,0.0,2.5);
    pPoints->InsertPoint(4,3.5,0.0,3.0);
    pPoints->InsertPoint(5,4.0,0.0,5.0);
    pPoints->InsertPoint(6,3.5,0.0,6.0);
    pPoints->InsertPoint(7,2.0,0.0,7.0);
    pPoints->InsertPoint(8,1.0,0.0,6.0);
    pPoints->InsertPoint(9,0.0,0.0,5.0);
    //構建線單元。繪制輪廓線
    vtkSmartPointer<vtkCellArray>pLineCell=vtkCellArray::New();
    //構建一個單元,由10個點構成
    pLineCell->InsertNextCell(10);
    //構成單元點集的索引號
    pLineCell->InsertCellPoint(0);
    pLineCell->InsertCellPoint(1);
    pLineCell->InsertCellPoint(2);
    pLineCell->InsertCellPoint(3);
    pLineCell->InsertCellPoint(4);
    pLineCell->InsertCellPoint(5);
    pLineCell->InsertCellPoint(6);
    pLineCell->InsertCellPoint(7);
    pLineCell->InsertCellPoint(8);
    pLineCell->InsertCellPoint(9);
    //定義多邊形數據集
    vtkSmartPointer<vtkPolyData>pPolyData=vtkPolyData::New();
    //設置構成多邊形的幾何數據
    pPolyData->SetPoints(pPoints);
    //設置單元類型,線單元
    pPolyData->SetLines(pLineCell);
    //壓制輪廓線,形成蘋果實體
    vtkSmartPointer<vtkRotationalExtrusionFilter>pExtruFilter=vtkRotationalExtrusionFilter::New();
    pExtruFilter->SetInput(pPolyData);
    //設置生成蘋果表面的光滑度參數,蘋果的表面由多少個面構成
    pExtruFilter->SetResolution(10);
    //將數據映射到圖形系統進行繪制
    vtkSmartPointer<vtkPolyDataMapper>pMap=vtkPolyDataMapper::New();
   pMap->SetInput(pExtruFilter->GetOutput());
   vtkSmartPointer<vtkActor>pActor=vtkActor::New();
   pActor->SetMapper(pMap);
   pActor->GetProperty()->SetColor(0.0,1.0,0.0);
    //繪制
   vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New();
   pRen->AddActor(pActor);
   //創建繪制窗口
   vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New();
   pRenWin->AddRenderer(pRen);
   //創建交互器
   vtkSmartPointer<vtkRenderWindowInteractor>pIren=vtkRenderWindowInteractor::New();
   pIren->SetRenderWindow(pRenWin);
    //設置背景顏色
   pRen->SetBackground(1,1,1);
   //設置窗口尺寸
   pRenWin->SetSize(300,300);
   pRenWin->Render();
   pRen->ResetCamera();
   //開始繪制
   pIren->Initialize();
   pIren->Start();
   return 0;
}


結果的幾個角度截圖


技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享


VTK學習之路——畫畫我的小蘋果