level 12
新开一个帖子,专门写体绘制部分,我也是半吊子,边学边写,欢迎大家一起来探讨。
2016年05月25日 02点05分
1
level 12
注意:
VTK 5.XXX版本中体绘制的GPU部分,都需要预装DX~ 这个很坑;
之后的版本中引入的opengl2.0,可以直接使用。
2016年05月25日 02点05分
3
@张千坤 ![[哈哈]](/static/emoticons/u54c8u54c8.png)
有问题发帖就好了,QQ基本不用,还是贴吧方便
2016年05月26日 00点05分
发现相比于GPU,还是三位纹理映射交互更快,只是打开的时候需要一段时间计算纹理,之后就很顺畅了~
2016年05月26日 13点05分
@7号撞针 确实是这样。但有些人接受不了数据切换那一会儿~
2016年05月27日 00点05分
您好,请问如果电脑没有显卡,是不是就不能用vtkGPUVolumeRayCastMapper?
2016年08月13日 12点08分
level 6
void main() //////////////////面绘////////////////
{
vtkRenderer *aRenderer = vtkRenderer::New();//建立绘制者
vtkRenderWindow *renWin = vtkRenderWindow::New(); //建立绘制窗口
renWin->AddRenderer(aRenderer); //将绘制者加入绘制窗口
renWin->SetSize(512, 512);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkVolume16Reader *reader = vtkVolume16Reader::New();
reader->SetDataDimensions(512, 512);//设置图像像素值
reader->SetImageRange(1,90); //设置图片数量
reader->SetDataByteOrderToLittleEndian();//不知道什么鬼
reader->SetFilePrefix("E:\\emphysema M66\\L00");//图片路径
reader->SetFilePattern("%s%d.bmp");
reader->SetDataSpacing(3,3,1);//像素间的间隔
vtkMarchingCubes *skinExtractor = vtkMarchingCubes::New(); //用MarchingCubes绘制曲面
skinExtractor->SetInputConnection(reader->GetOutputPort());
skinExtractor->SetValue(0, 10);//设置阈值,其实为二值图像重建
//vtkDecimatePro *deci = vtkDecimatePro::New(); //减少数据读取点,以牺牲数据量加速交互
//deci->SetTargetReduction(0.9);
//deci->SetInputConnection(skinExtractor->GetOutputPort());
//vtkSmoothPolyDataFilter *smooth = vtkSmoothPolyDataFilter::New(); //使图像更加光滑
//smooth->SetInputConnection(deci->GetOutputPort());
//smooth->SetNumberOfIterations(100);
//vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();//绘制法线
//skinNormals->SetInputConnection(skinExtractor->GetOutputPort());
vtkStripper *skinStripper = vtkStripper::New(); //三角带连接
skinStripper->SetInputConnection(skinNormals->GetOutputPort());
vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
skinMapper->SetInputConnection(skinExtractor->GetOutputPort());
//skinMapper->ScalarVisibilityOff();
vtkActor *skin = vtkActor::New();
skin->SetMapper(skinMapper); //获得皮肤几何数据的属性
skin->GetProperty()->SetDiffuseColor(0.38, 0.54, 0.47); //设置皮肤颜色的属性
skin->GetProperty()->SetSpecular(0.4); //设置反射率
skin->GetProperty()->SetSpecularPower(20); //设置反射光强度
skin->GetProperty()->SetOpacity(0.8);//设置透明度
vtkCamera *aCamera = vtkCamera::New(); //定义摄像机
aCamera->SetViewUp(0, 0, -1); //取得摄像机方向
aCamera->SetPosition(0, 1, 0); //光源位置
aCamera->SetFocalPoint(0, 0, 0); //取焦点坐标
//aCamera->ComputeViewPlaneNormal();
aRenderer->AddActor(skin);
aRenderer->SetActiveCamera(aCamera);
aRenderer->ResetCamera();
aCamera->Dolly(1.5); //大于1向摄像机焦点移动小于1则向远离焦点的方向移动
aRenderer->SetBackground(0,0,0);
aRenderer->ResetCameraClippingRange();
/*vtkBoxWidget *boxWidget = vtkBoxWidget::New();
boxWidget->SetInteractor(iren);
boxWidget->SetPlaceFactor(1.25);
boxWidget->SetProp3D(skin);
boxWidget->PlaceWidget();*/
iren->Initialize();
iren->Start();
2016年06月02日 12点06分
6
level 12
vtkVolume16Reader *reader = vtkVolume16Reader::New();
reader->SetDataDimensions(512, 512);//设置图像像素值
reader->SetImageRange(1,90); //设置图片数量
reader->SetDataByteOrderToLittleEndian();//不知道什么鬼
reader->SetFilePrefix("E:\\emphysema M66\\L00");//图片路径
reader->SetFilePattern("%s%d.bmp");
reader->SetDataSpacing(3,3,1);//像素间的间隔
这些数值设置对就OK啦
2016年06月03日 04点06分
8
level 5
vtk后面的版本将要弃用vtkVolumeRayCastMapper,推荐用vtkFixedPointVolumeRayCastMapper
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
volumeMapper->SetBlendModeToComposite();
volumeMapper->SetInputConnection(reader->GetOutputPort());
//volumeMapper->SetVolumeRayCastFunction(rayCastFun);
//设置光线采样距离
volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance()*4);
//设置图像采样步长
volumeMapper->SetAutoAdjustSampleDistances(0);
volumeMapper->SetImageSampleDistance(1);
vtkSmartPointer<vtkVolumeProperty> volumeProperty =
vtkSmartPointer<vtkVolumeProperty>::New();
volumeProperty->SetInterpolationTypeToLinear();
//volumeProperty->ShadeOn(); //打开或者关闭阴影测试
volumeProperty->SetAmbient(0.4);
volumeProperty->SetDiffuse(0.6);
volumeProperty->SetSpecular(0.2);
vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity =
vtkSmartPointer<vtkPiecewiseFunction>::New();
compositeOpacity->AddPoint(70, 0.00);
compositeOpacity->AddPoint(90, 0.40);
compositeOpacity->AddPoint(180, 0.60);
volumeProperty->SetScalarOpacity(compositeOpacity); //设置不透明度传输函数
vtkSmartPointer<vtkPiecewiseFunction> volumeGradientOpacity =
vtkSmartPointer<vtkPiecewiseFunction>::New();
volumeGradientOpacity->AddPoint(10, 0.0);
volumeGradientOpacity->AddPoint(90, 0.5);
volumeGradientOpacity->AddPoint(100, 1.0);
//volumeProperty->SetGradientOpacity(volumeGradientOpacity);//设置梯度不透明度效果对比
vtkSmartPointer<vtkColorTransferFunction> color =
vtkSmartPointer<vtkColorTransferFunction>::New();
color->AddRGBPoint(0.000, 0.00, 0.00, 0.00);
color->AddRGBPoint(64.00, 1.00, 0.52, 0.30);
color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);
color->AddRGBPoint(220.0, 0.20, 0.20, 0.20);
volumeProperty->SetColor(color);
vtkSmartPointer<vtkVolume> volume =
vtkSmartPointer<vtkVolume>::New();
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
ren->SetBackground(1.0, 1.0, 1.0);
ren->AddVolume( volume );
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren);
renWin->SetSize(640, 480);
renWin->Render();
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
ren->ResetCamera();
renWin->Render();
iren->Start();
2016年08月13日 12点08分
12
vtkFixedPointVolumeRayCastMapper 这个超好用
2016年08月15日 00点08分
请问这个是从什么地方得知?可以交流群?
2017年05月20日 15点05分
是的,现在使用的是vtk8.1版本的,就不能用vtkVolumeRayCastMapper这个函数了
2018年04月06日 10点04分
level 1
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
这一句就报错了,是vtk编译的问题吗?
2016年09月08日 09点09分
14
你好 我现在也会遇到这个问题 请问你是怎么解决的呢
2025年02月25日 03点02分
level 2
vtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();
reader->SetFileName ( "D:\\qiguandata.txt" );
我用vtk读取了一个已分割好的气管的点的数据 x y z那种的。读进来后 都是一堆点。如何弄成体绘制那种。。。
2016年10月17日 07点10分
16
哦,一个月前~这个弄不成吧
2016年11月23日 00点11分
我也是希望实现类似的功能,将点云变成体绘制那种实体。不知道你做得怎么样了。另外吧主的意思是VTK无法做到这一点么?
2017年04月28日 03点04分
level 1
VTK进行体绘制,vtkImageData数据变化后,如何重新让三维图像重建
vtkImageData m_img数据变化后,如何让三维图像重新生成,
m_cast = vtkSmartPointer<vtkImageCast>::New();
m_cast->SetInput(m_img);
m_ComositeFun =vtkSmartPointer<vtkVolumeRayCastCompositeFunction>::New();
m_volumeProperty =vtkSmartPointer<vtkVolumeProperty>::New();
m_compositeOpacity = vtkSmartPointer<vtkPiecewiseFunction>::New();
m_color = vtkSmartPointer<vtkColorTransferFunction>::New();
m_renWin = vtkSmartPointer<vtkRenderWindow>::New();
2016年11月17日 02点11分
17
管道建好了,updata 或者 modify一下
2016年11月23日 00点11分
level 12
之前的问题都解决了。
现在体绘制成功了,但是感觉好粗糙啊。体绘制调参或者优化的方法有没有啊?吧主大大指点一下。
2017年07月13日 08点07分
20