#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //------------------------------------------------------------------------------ int TestGPURayCastIsosurface(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) { vtkFloatingPointExceptions::Disable(); vtkNew data; data->SetWholeExtent(-100, 100, -100, 100, -100, 100); data->Update(); std::cout << "range: " << data->GetOutput()->GetPointData()->GetScalars()->GetRange()[0] << ", " << data->GetOutput()->GetPointData()->GetScalars()->GetRange()[1] << std::endl; ; vtkNew mapper; mapper->SetInputConnection(data->GetOutputPort()); mapper->AutoAdjustSampleDistancesOff(); mapper->SetSampleDistance(0.5); mapper->SetBlendModeToIsoSurface(); vtkNew colorTransferFunction; colorTransferFunction->RemoveAllPoints(); colorTransferFunction->AddRGBPoint(220.0, 0.0, 1.0, 0.0); colorTransferFunction->AddRGBPoint(150.0, 1.0, 1.0, 1.0); colorTransferFunction->AddRGBPoint(190.0, 0.0, 1.0, 1.0); vtkNew scalarOpacity; scalarOpacity->AddPoint(220.0, 1.0); scalarOpacity->AddPoint(150.0, 0.2); scalarOpacity->AddPoint(190.0, 0.6); vtkNew volumeProperty; volumeProperty->ShadeOn(); volumeProperty->SetInterpolationTypeToLinear(); volumeProperty->SetColor(colorTransferFunction); volumeProperty->SetScalarOpacity(scalarOpacity); vtkNew volume; volume->SetMapper(mapper); volume->SetProperty(volumeProperty); vtkNew renderer; renderer->AddVolume(volume); renderer->SetBackground(0.5, 0.5, 0.5); renderer->ResetCamera(); vtkNew renderWindow; renderWindow->SetSize(800, 600); renderWindow->AddRenderer(renderer); vtkNew style; vtkNew renderWindowInteractor; renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->SetInteractorStyle(style); // Check that no errors is created when no contour values are set renderWindow->Render(); volumeProperty->GetIsoSurfaceValues()->SetValue(0, 220.0); renderWindow->Render(); volumeProperty->GetIsoSurfaceValues()->SetNumberOfContours(0); renderWindow->Render(); // Now add some contour values to draw iso surfaces volumeProperty->GetIsoSurfaceValues()->SetValue(0, 220.0); volumeProperty->GetIsoSurfaceValues()->SetValue(1, 150.0); volumeProperty->GetIsoSurfaceValues()->SetValue(2, 190.0); renderWindow->Render(); renderWindowInteractor->Start(); return 0; }