vtkImageData 体绘制
来源:互联网 发布:阿里云服务器域名备案 编辑:程序博客网 时间:2024/05/29 15:48
#include "vtkUnsignedCharArray.h"#include "vtkPiecewiseFunction.h"#include "vtkColorTransferFunction.h"#include "vtkVolumeRayCastCompositeFunction.h"#include "vtkVolumeRayCastMapper.h"#include "vtkImageData.h"#include "vtkVolumeProperty.h"#include "vtkVolume.h"#include "vtkRenderWindow.h"#include "vtkRenderer.h"#include "vtkRenderWindowInteractor.h"void main(){//-----_建立图像数据-------vtkImageData *id=vtkImageData::New();id->SetDimensions(10,25,100);id->SetScalarTypeToUnsignedShort();id->SetNumberOfScalarComponents(1);id->AllocateScalars();unsigned short *ptr=(unsigned short *)id->GetScalarPointer(); for(int k=0;k<100;k++)for(int i=0;i<10;i++)for(int j=0;j<25;j++){if(k<25)*(ptr+k*10*25+i*25+j)=32;if(k>24&&k<50)*(ptr+k*10*25+i*25+j)=96;if(k>49&&k<75)*(ptr+k*10*25+i*25+j)=160;if(k>74&&k<100)*(ptr+k*10*25+i*25+j)=224;}//-----_体绘制-------//_线性插值透明度映射方法vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New(); opacityTransferFunction->AddPoint(32,0.0); opacityTransferFunction->AddPoint(224,1.0);//opacityTransferFunction->ClampingOff();//_设定标量值的颜色属性vtkColorTransferFunction *colorTransferFunction= vtkColorTransferFunction::New(); colorTransferFunction->AddRGBPoint(16, 0.1,0.0,0.0); colorTransferFunction->AddRGBPoint(64, 0.3,0.0,0.0); colorTransferFunction->AddRGBPoint(128,0.5,0.0,0.0); colorTransferFunction->AddRGBPoint(192,0.7,0.0,0.0); colorTransferFunction->AddRGBPoint(240,0.9,0.0,0.0); //_设定体数据的属性:的不透明性和颜色值映射标量值vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New(); volumeProperty->SetColor(colorTransferFunction); volumeProperty->SetScalarOpacity(opacityTransferFunction); volumeProperty->SetInterpolationTypeToLinear();//设定插值类型为线性插值volumeProperty->SetDiffuse(0.7); volumeProperty->SetAmbient(0.01); volumeProperty->SetSpecular(0.5); volumeProperty->SetSpecularPower(70.0); //绘制方法:体射线投射vtkVolumeRayCastCompositeFunction *compositeFunction=vtkVolumeRayCastCompositeFunction::New();//_体数据映射器vtkVolumeRayCastMapper *volumeMapper=vtkVolumeRayCastMapper::New();volumeMapper->SetInput((vtkImageData *)id);volumeMapper->SetVolumeRayCastFunction(compositeFunction);//创建一个 vtkVolume(vtkProp3D 的子类,类似于_vtkActor)对象来处理被映射的体数据和体属性数据vtkVolume *volume=vtkVolume::New();volume->SetMapper(volumeMapper);volume->SetProperty(volumeProperty);// 流水线vtkRenderer* ren=vtkRenderer::New();ren->AddVolume(volume);vtkRenderWindow* renwin=vtkRenderWindow::New();renwin->AddRenderer(ren);vtkRenderWindowInteractor* iren=vtkRenderWindowInteractor::New();iren->SetRenderWindow(renwin);renwin->Render();iren->Start();}
结果::
有一块透明的看不到,所以看起来只有三个颜色块
若设置id的间隔,
id->SetSpacing(10.0,4.0,1.0);
结果为:
- vtkImageData 体绘制
- vtkImageData vtkDicomImageReader
- vtkImageData基本操作
- vtkImageData转换成cv::Mat
- vtkImageData转化为cv::Mat
- vtkImageData处理之阈值分割
- 【vtk】数据类型转换vtkpolydata转vtkImagedata
- vtkImagedata与vtkPolydata的减采样
- 体绘制
- 体绘制
- 【VTK】vtkImagedata像素值的访问与修改
- vtk体绘制-例子
- 什么是体绘制?
- VTK GPU体绘制
- vtk 体绘制小结
- 体绘制技术小结
- 体绘制函数 vtk
- VTK之体绘制
- A* 算法复习
- 少年派 vs. 哈尔罗杰
- 详解Linux安装GCC方法
- Java 学习杂谈(一)(二)(三)
- liunx apt 常用命令 写写后面忘记好翻看
- vtkImageData 体绘制
- MFC最好不要在子线程中操控界面上的控件
- +++程序员高手修炼之路
- 软件生存周期
- joomla jce editor 解决上传中文名文件问题
- Linux下基于socket多线程并发通信的实现
- Tomcat 5源码分析
- ecshop 商品分类页 取得当前分类下的子分类方法
- 关于提高自己JAVA水平的十大技术