level 6
//体绘制程序开始
vtkImageShiftScale *pImageShift = vtkImageShiftScale::New();
pImageShift->SetInput((vtkDataObject *)pApp->m_pDICOMReader->GetOutput());
pImageShift->SetOutputScalarTypeToUnsignedShort ();
pImageShift->Update();
//体绘制惯用语句:
//计算光照效应。采用光线类 vtkVolumeRayCastCompositeFunction 进行投射,
//最终用 vtkVolumeRayCastMapper类进行光效应计算。
//vtkVolumeRayCastCompositeFunction*compositeFunction=vtkVolumeRayCastCompositeFunction::New();体绘制算法一共3种等值面绘制函数(vtkVolumeRayCastIsosurfaceFunction)、最大密度投影函数(vtkVolumeRayCastMIPFunction)、合成体绘制函数投影函数(vtkVolumeRayCastMIPFunction)、合成体绘制函数(vtkVolumeRayCastCompositeFunction)
vtkVolumeRayCastIsosurfaceFunction *sosurfaceFunction =vtkVolumeRayCastIsosurfaceFunction::New();
sosurfaceFunction->SetIsoValue(100); //等值面的值
vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
volumeMapper->SetVolumeRayCastFunction(sosurfaceFunction);
volumeMapper->SetInput(pImageShift->GetOutput());
//透明度映射函数定义
//给数据点赋不透明值。体绘制中,需要显示三维数据场的内部结构,因而需要生成具有透明度的图像。
vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New();
opacityTransferFunction->AddPoint(0, 0.0);
opacityTransferFunction->AddPoint(750, 50.0);
opacityTransferFunction->AddPoint(3000, 1.0);
opacityTransferFunction->AddSegment (1400, 0.73, 3071, 0.9);
opacityTransferFunction->AddSegment (-1024, 0.73, 1200, 0.9);
opacityTransferFunction->ClampingOff();
//颜色映射函数定义
//给数据点赋颜色值,将分类后的组织信息分别予以不同的颜色,便于图像分析。
vtkColorTransferFunction *colorTransferFunction =
vtkColorTransferFunction::New();
colorTransferFunction->AddRGBPoint(3000.0, 1.0, 0.75, 0.75);
//colorTransferFunction->AddRGBPoint(750.0, 1.0, 1.0, 1.0);
//colorTransferFunction->AddRGBPoint(128.0, 0.0, 0.0, 1.0);
//colorTransferFunction->AddRGBPoint(192.0, 0.0, 1.0, 0.0);
//colorTransferFunction->AddRGBPoint(255.0, 0.0, 0.2, 0.0);
//体数据属性
vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
volumeProperty->SetScalarOpacity(opacityTransferFunction);
volumeProperty->SetColor(colorTransferFunction);
//volumeProperty->SetGradientOpacity(gradientTransferFunction);
//volumeProperty->SetIndependentComponents(3000);
volumeProperty->ShadeOn();
volumeProperty->SetInterpolationTypeToLinear();
//体绘制惯用语句:
//计算光照效应。采用光线类 vtkVolumeRayCastCompositeFunction 进行投射,
//最终用 vtVolumeRayCastMapper类进行光效应计算。
vtkVolume *volume = vtkVolume::New();
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
m_pvtkRenderer1->AddVolume(volume);//体绘制结束
2016年10月19日 01点10分