三维体渲染颜色不透明度调整

先上图片:

再上代码:

vtkSmartPointer< vtkRenderer > aRenderder = vtkSmartPointer< vtkRenderer >::New();
	vtkSmartPointer< vtkRenderWindow > aRenWin = vtkSmartPointer< vtkRenderWindow >::New();
	vtkSmartPointer< vtkRenderWindowInteractor > aInteractor = vtkSmartPointer< vtkRenderWindowInteractor >::New();
	 
	aRenWin->AddRenderer(aRenderder);
	aInteractor->SetRenderWindow(aRenWin);
	vtkSmartPointer<vtkSeedImageCallback> mouseCallback = vtkSmartPointer<vtkSeedImageCallback>::New();
	aInteractor->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);
	mouseCallback->SetClientData(NULL);
	颜色条/
	vtkSmartPointer<vtkContextScene> scene1 = vtkSmartPointer<vtkContextScene>::New();

	vtkSmartPointer<vtkContextView> view =vtkSmartPointer<vtkContextView>::New();
	view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
	view->SetRenderWindow(aRenWin);
	view->SetInteractor(aInteractor);
	view->GetRenderWindow()->SetSize(400, 350);
	vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New();
	chart->SetLayoutStrategy(vtkChartXY::FILL_RECT);
	chart->SetSize(vtkRectf(-22, -30, 505, 100));
	view->GetScene()->AddItem(chart);
	chart->GetAxis(0)->SetGridVisible(false);
	 
	vtkSmartPointer<vtkColorTransferFunction> colorTransferFunction =
		vtkSmartPointer<vtkColorTransferFunction>::New();
	colorTransferFunction->AddHSVSegment(0, 0., 1., 1., 85., 0.3333, 1., 1.);
	colorTransferFunction->AddHSVSegment(85., 0.3333, 1., 1., 170., 0.6666, 1., 1.);
	colorTransferFunction->AddHSVSegment(170., 0.6666, 1., 1., 255., 0., 1., 1.);

	colorTransferFunction->Build();

	vtkSmartPointer<vtkColorTransferFunctionItem> colorTransferItem =
		vtkSmartPointer<vtkColorTransferFunctionItem>::New();
	colorTransferItem->SetColorTransferFunction(colorTransferFunction);
	chart->AddPlot(colorTransferItem);

	vtkSmartPointer<vtkColorTransferControlPointsItem> controlPointsItem =
		vtkSmartPointer<vtkColorTransferControlPointsItem>::New();
	controlPointsItem->SetColorTransferFunction(colorTransferFunction);
	controlPointsItem->SetUserBounds(0., 255., 0., 1.);
	chart->AddPlot(controlPointsItem);




///梯度不透明度/

	vtkNew<vtkChartXY> chartx;
	chartx->ForceAxesToBoundsOn();
	chartx->SetAutoSize(true);
	chartx->SetAutoAxes(false);
	chartx->SetHiddenAxisBorder(0);

	for (int i = 0; i < 4; ++i)
	{
		chartx->GetAxis(i)->SetVisible(true);
		chartx->GetAxis(i)->SetNumberOfTicks(0);
		chartx->GetAxis(i)->SetBehavior(2);
		chartx->GetAxis(i)->SetLabelsVisible(false);
		chartx->GetAxis(i)->SetMargins(1, 1);
		chartx->GetAxis(i)->SetTitle("a" + i);
	}

	view->GetScene()->AddItem(chartx.GetPointer());
	unsigned int nItem = view->GetScene()->GetNumberOfItems();
	chartx->SetLayoutStrategy(vtkChartXY::FILL_RECT);
	chartx->SetSize(vtkRectf(0, 50, 400, 300));
	// 创建传输映射标量值到不透明度.
	vtkNew<vtkPiecewiseFunction> opacityFunction;
	opacityFunction->AddPoint(0.0, 0.1);
	opacityFunction->AddPoint(0.5, 0.5);
//	opacityFunction->AddPoint(0.6, 0.9);
	opacityFunction->AddPoint(1., 1.);

	// 创建标量值到颜色的传输映射 .
	vtkNew<vtkColorTransferFunction> colorTransferFunctionX;
	colorTransferFunctionX->SetColorSpaceToHSV();
	colorTransferFunctionX->HSVWrapOn();
	colorTransferFunctionX->AddHSVSegment(0., 0., 1., 1., 0.3333, 0.3333, 1., 1.);
	colorTransferFunctionX->AddHSVSegment(0.3333, 0.3333, 1., 1., 0.6666, 0.6666, 1., 1.);
	colorTransferFunctionX->AddHSVSegment(0.6666, 0.6666, 1., 1., 1., 0., 1., 1.);

	colorTransferFunctionX->Build();

	vtkNew<vtkCompositeTransferFunctionItem> item;
	item->SetColorTransferFunction(colorTransferFunctionX.GetPointer());
	item->SetOpacityFunction(opacityFunction.GetPointer());
	item->SetMaskAboveCurve(true);
	chartx->AddPlot(item.GetPointer());

	vtkNew<vtkCompositeControlPointsItem> controlPoints;
	controlPoints->SetColorTransferFunction(colorTransferFunctionX.GetPointer());
	controlPoints->SetOpacityFunction(opacityFunction.GetPointer());
	controlPoints->SetEndPointsXMovable(false);
	controlPoints->SetUseOpacityPointHandles(true);
	controlPoints->SetEndPointsRemovable(false);
	chartx->AddPlot(controlPoints.GetPointer());

	//Finally render the scene and compare the image to a reference image
	view->GetRenderWindow()->SetMultiSamples(0);

	// recorder to play back previously events

	vtkSmartPointer<vtkRenderWindowInteractor> a = view->GetInteractor();
	view->GetInteractor()->Initialize();
	view->GetInteractor()->Start();

	return EXIT_SUCCESS;

问题: 怎么把vtk的窗口与QT结合。就是让第一个窗口Win32OpenGL    #1显示在一个QT控件中?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值