码迷,mamicode.com
首页 > 移动开发 > 详细

VTK学习之路——画画我的小苹果

时间:2014-09-17 20:31:12      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:vtk   c++   vs2010   图形   苹果   

数据集主要由描述数据集几何形状的点集数据及构成数据集的单元构成,因此构建数据集的主要任务就是确定点集和构建单元,本示例程序构建了一个苹果的实体,然后绘制苹果,示例程序执行的步骤如下:
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;
}


结果的几个角度截图


bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣


VTK学习之路——画画我的小苹果

标签:vtk   c++   vs2010   图形   苹果   

原文地址:http://blog.csdn.net/zhurui_idea/article/details/39346453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!