求助体绘制的一点小问题
vtk吧
全部回复
仅看楼主
level 6
77焱77 楼主
本人菜鸟,求大神给一个等值面体绘制的程序例子,然后教一下怎么改制可以显示不同的组织[哈哈],,还有一个更菜鸟的问题,那个cmakelist.txt是怎么写的[委屈][委屈]
2016年10月19日 00点10分 1
level 6
77焱77 楼主
//体绘制程序开始
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分 3
[乖]好巧,这代码貌似是我很久前发的。你朋友是baidu君
2016年10月20日 00点10分
@rabbitbride 哇哈哈,我也不是很清楚,我们都是小菜鸟,一直在模仿大神[哈哈]
2016年10月20日 01点10分
1