求助,使用qvtk进行体绘制时,通过鼠标调节actor出现闪一下白屏
vtk吧
全部回复
仅看楼主
level 5
小龙_993 楼主
问题: 使用qvtk进行体绘制时,通过鼠标调节actor出现闪一下白屏,或者多次点击qvtk窗口也会出现整个qvtk窗口白屏下又恢复了。
编译环境:vtk 5.10 +qt 4.8.5
2016年09月14日 06点09分 1
level 12
鼠标交互下是不是有屏幕刷新?
贴代码帮你看[哈哈]
2016年09月19日 01点09分 2
每次cpu到96%以上就会伴随着闪一白屏,不知道哪个先出现,难道是cpu不行么,我cpu为i5-4950。
2016年09月19日 01点09分
@小龙_993 i5没问题。我用奔腾系列。。。
2016年09月19日 03点09分
level 5
小龙_993 楼主
就是一个简单的体绘制代码,我把生成的体绘制对象放大后进行操作很容易就出现闪一白屏,谢谢。
vtkInteractorStyleTrackballCamera *style =vtkInteractorStyleTrackballCamera::New();
RenderWindow->AddRenderer(Renderer);
RenderWindowInteractor->SetRenderWindow(RenderWindow);
DICOMImageReader->SetDirectoryName(Address_Storage);
DICOMImageReader->Update();
DICOMImageReader->SetDataByteOrderToLittleEndian();
readerImageCast->SetInput((vtkDataObject *)DICOMImageReader->GetOutput());
readerImageCast->SetOutputScalarTypeToUnsignedShort();
//梯度传递函数。该函数确定不同梯度值的不透明度,从而突出不同组织之间的结构和相互之间的层次关系
//不透明度
opacityTransferFunction->AddPoint(-3024, 0, 0.5, 0.0);
opacityTransferFunction->AddPoint(-1820, 0, .5, .0);
opacityTransferFunction->AddPoint(100, 0, .5, 0);
opacityTransferFunction->AddPoint(625, .71, .5, 0.0);
opacityTransferFunction->AddPoint(3071, 0.0, 0.5, 0.0);
//梯度
gradientTransferFunction->AddPoint(0,2.0);
gradientTransferFunction->AddPoint(300, 2.0);
gradientTransferFunction->AddSegment(600, 0.63, 900, 0.9);
gradientTransferFunction->AddPoint(1300, 0.1);
//Mapper point to RGB color
colorTransferFunction->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
colorTransferFunction->AddRGBPoint(-1240, 0.73, 0.25, 0.300,.5, 0.0);
colorTransferFunction->AddRGBPoint(641, .90, .82, .56, .5, 0.0);
colorTransferFunction->AddRGBPoint(3071, 1, 1, 1, .5, 0.0);
//在这里设置体属性
volumeProperty->SetColor(colorTransferFunction);//颜色
volumeProperty->SetScalarOpacity(opacityTransferFunction);//不透明度
volumeProperty->ShadeOn();
volumeProperty->SetAmbient(0.5);
volumeProperty->SetDiffuse(1.2);
volumeProperty->SetSpecular(0.6);
volumeProperty->SetSpecularPower(25);
volumeProperty->SetInterpolationTypeToLinear();
// vtkVolumeRayCastMIPFunction *compositeFunction = vtkVolumeRayCastMIPFunction::New();//体绘制方法:最大密度投影函数
//vtkVolumeRayCastCompositeFunction *compositeFunction = vtkVolumeRayCastCompositeFunction::New();//体绘制方法:
volumeMapper->SetRequestedRenderModeToRayCast();
volumeMapper->SetInterpolationModeToLinear();
volumeMapper->SetInputConnection(readerImageCast->GetOutputPort());
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
volume->RotateX(-10);
volume->RotateY(-15);
volume->RotateZ(50);
Renderer->AddVolume(volume);
aCamera->SetViewUp (0, 0, -1);
aCamera->SetPosition (0, 1, 0);
aCamera->SetFocalPoint (0, 0, 0);
aCamera->ComputeViewPlaneNormal();
Renderer->SetActiveCamera(aCamera);
Renderer->ResetCamera ();
Renderer->SetBackground(0.2,0.6,0.8);
RenderWindow->SetSize(431, 281);
ui.qvtkWidget->SetRenderWindow(RenderWindow); //********************
ui.qvtkWidget->update(); //********************
RenderWindowInteractor->SetInteractorStyle(style);
RenderWindowInteractor->Initialize();
RenderWindowInteractor->Start(); //********************
2016年09月19日 01点09分 4
level 12
vtkFixedPointVolumeRayCastMapper
换这个试试
2016年09月19日 04点09分 5
level 12
我猜你用的是这个方法vtkVolumeRayCastMIPFunction
MIP的特点就是白一下,[哈哈]
2016年09月19日 04点09分 6
vtkSmartVolumeMapper* volumeMapper;用的是vtkSmartVolumeMapper,试了一下vtkFixedPointVolumeRayCastMapper 也还是酱紫。[泪]
2016年09月19日 04点09分
@小龙_993 难道你用的是A卡?
2016年09月20日 00点09分
@rabbitbride 没有,用的是NVIDIA Quadro k600,难道用的是核显么,这个需要选择配置么?
2016年09月20日 01点09分
@小龙_993 那就没问题了,一定是在鼠标交互的时候做了什么
2016年09月20日 02点09分
level 5
小龙_993 楼主
谢谢吧主给的建议,昨天关闭了一下独显然后重新打开就好了[黑线]
2016年09月22日 02点09分 7
[哈哈]原来你用的是笔记本
2016年09月22日 08点09分
1