新人求助,体绘制有点搞不明白啊,怎么不透明啊?
vtk吧
全部回复
仅看楼主
level 1
zhjt2008 楼主
才接触VTK,感觉有点迷茫啊,做了一个面绘制的,还算凑合。改了一个体绘制,读取的jpg灰度的图片切片序列,结果就是不透明,整个就是一个黑块,搞不懂啊?应该怎么改啊?求大佬帮帮忙。万能的吧主啊。@rabbitbride
2018年06月28日 03点06分 1
level 1
zhjt2008 楼主
二楼贴代码
int main(int argc, char *argv[])
{
vtkSmartPointer<vtkJPEGReader>reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetDataScalarTypeToUnsignedChar();
reader->SetFileDimensionality(3);
reader->SetFilePrefix("F://Data/JPG3/");
reader->SetFileNameSliceSpacing(1);
reader->SetFilePattern("%s%d.jpg");
reader->SetDataExtent(0, 379, 0, 475, 1, 54);
reader->SetDataSpacing(1, 1, 5);
reader->Update();
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
volumeMapper->SetInputData(reader->GetOutput());
//设置光线采样距离
//volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance()*4);
//设置图像采样步长
//volumeMapper->SetAutoAdjustSampleDistances(0);
//volumeMapper->SetImageSampleDistance(4);
/*************************************************************************/
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(0.6, 0.7, 0.8);
ren->AddVolume(volume);
vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New();
rw->AddRenderer(ren);
rw->SetSize(640, 480);
rw->Render();
rw->SetWindowName("VolumeRendering PipeLine");
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(rw);
/********************************************************************************/
//vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();
//axes->SetScale(10);
//vtkSmartPointer<vtkOrientationMarkerWidget> widget =
// vtkSmartPointer<vtkOrientationMarkerWidget>::New();
//widget->SetOutlineColor(1, 1, 1);
//widget->SetViewport(0, 0, 0.2, 0.2);
//widget->SetOrientationMarker(axes);
//widget->SetInteractor(rwi);
//widget->SetEnabled(1);
//widget->InteractiveOn();
ren->ResetCamera();
rw->Render();
rwi->Start();
return 0;
}
2018年06月28日 03点06分 2
level 1
zhjt2008 楼主
昨天没艾特上吧主吗?那就再艾特一次把。。。
@rabbitbride
2018年06月29日 02点06分 3
level 1
同问,我的也是不透明
2018年07月30日 03点07分 4
你用的数据是啥?
2018年07月30日 07点07分
jpg,我把图转成灰度图就能变成透明的了,但是图表面感觉特别的涩,而且颜色好难调,我想调个皮肤色,让我调出了绿色[汗]
2018年07月30日 09点07分
@windStormsky 是,颜色特难调,自己百度者调吧,还好我是工业的,不要求颜色,能区别就行。[吐舌]
2018年08月03日 03点08分
@windStormsky “图转成灰度图”什么意思?能具体点吗?
2018年08月15日 15点08分
level 3
楼主,你的问题解决了吗,能不能说一下方法呀,我也是jpg格式,侧面看就是一层一层的堆叠[泪]
2021年12月01日 08点12分 6
level 3
@rabbitbride 吧主帮帮忙
2021年12月01日 08点12分 8
老哥,你解决这个问题了吗?
2022年04月29日 11点04分
@我是程序控 颜色传输函数设置不对, 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); ,改一下不同标量值对应的rgb值试试
2022年06月06日 10点06分
1