/********************************************************************** 文件名: 7.4_UnstructuredGridVolumeRenderingApp.cpp Copyright (c) 张晓东, 罗火灵. All rights reserved. 更多信息请访问: http://www.vtkchina.org (VTK中国) http://blog.csdn.net/www_doling_net (东灵工作室) **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //测试:../data/ironProt.vtk int main(int argc, char*argv[]) { if (argc < 2) { std::cout< ren = vtkSmartPointer::New(); ren->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renWin = vtkSmartPointer::New(); renWin->AddRenderer(ren); vtkSmartPointer iren = vtkSmartPointer::New(); iren->SetRenderWindow(renWin); iren->SetDesiredUpdateRate(3); vtkSmartPointer reader = vtkSmartPointer::New(); reader->SetFileName(argv[1]); vtkSmartPointer thresh = vtkSmartPointer::New(); thresh->ThresholdByUpper(80); thresh->AllScalarsOff(); thresh->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer trifilter = vtkSmartPointer::New(); trifilter->SetInputConnection(thresh->GetOutputPort()); vtkSmartPointer opacityTransferFunction = vtkSmartPointer::New(); opacityTransferFunction->AddPoint(80.0, 0.0); opacityTransferFunction->AddPoint(120.0, 0.2); opacityTransferFunction->AddPoint(255.0, 0.2); vtkSmartPointer colorTransferFunction = vtkSmartPointer::New(); colorTransferFunction->AddRGBPoint(80.0, 0.0, 0.0, 0.0); colorTransferFunction->AddRGBPoint(120.0, 0.0, 0.0, 1.0); colorTransferFunction->AddRGBPoint(160.0, 1.0, 0.0, 0.0); colorTransferFunction->AddRGBPoint(200.0, 0.0, 1.0, 0.0); colorTransferFunction->AddRGBPoint(255.0, 0.0, 1.0, 1.0); vtkSmartPointer volumeProperty = vtkSmartPointer::New(); volumeProperty->SetColor(colorTransferFunction); volumeProperty->SetScalarOpacity(opacityTransferFunction); volumeProperty->ShadeOff(); volumeProperty->SetInterpolationTypeToLinear(); vtkSmartPointer volume = vtkSmartPointer::New(); volume->SetProperty(volumeProperty); int RenderType = 3; if (RenderType == 1) { vtkSmartPointer volumeMapper = vtkSmartPointer::New(); volumeMapper->SetInputConnection(trifilter->GetOutputPort()); volume->SetMapper(volumeMapper); ren->AddVolume(volume); } else if(RenderType == 2) { vtkSmartPointer volumeMapper = vtkSmartPointer::New(); volumeMapper->SetInputConnection(trifilter->GetOutputPort()); volume->SetMapper(volumeMapper); ren->AddVolume(volume); } else if(RenderType == 3) { vtkSmartPointer volumeMapper = vtkSmartPointer::New(); volumeMapper->SetInputConnection(trifilter->GetOutputPort()); volume->SetMapper(volumeMapper); ren->AddVolume(volume); } else if(RenderType == 4) { vtkSmartPointer volumeMapper = vtkSmartPointer::New(); volumeMapper->SetInputConnection(trifilter->GetOutputPort()); volumeMapper->SetLevelOfDetail(false); volumeMapper->SetGPUDataStructures(false); volumeMapper->SetKBufferSizeTo2(); volume->SetMapper(volumeMapper); renWin->Render(); int supported = volumeMapper->SupportedByHardware(ren); if(supported) { ren->AddVolume(volume); volumeMapper->SetLevelOfDetail(false); volumeMapper->SetKBufferSizeTo2(); } } renWin->SetSize(640, 480); renWin->Render(); renWin->SetWindowName("UnstructuredGridVolumeRendering"); renWin->Render(); iren->Start(); return EXIT_SUCCESS; }