Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save agirault/7a1f48a6f3f208b149ec4e4c99e492ee to your computer and use it in GitHub Desktop.
Save agirault/7a1f48a6f3f208b149ec4e4c99e492ee to your computer and use it in GitHub Desktop.
const char* objPath = ""; //orientation cube
const char* jpgPath = ""; //orientation texture
vtkRenderWindow* renderWindow = self.vtkView.renderWindow;
// Create & add the renderer
renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(0., 0., 0.);
renderer->SetViewport(0., 0., 1., 1.);
renderer->InteractiveOn();
renderWindow->AddRenderer(renderer);
// Restrict near and far planes closer to bounding box
// to optimize z depth
renderer->SetNearClippingPlaneTolerance(0.1);
renderer->SetClippingRangeExpansion(0);
// replace the default translucent pass with
// a more advanced depth peeling pass
auto basicPasses = vtkSmartPointer<vtkRenderStepsPass>::New();
peelingPass = vtkSmartPointer<vtkDepthPeelingPass>::New();
peelingPass->SetMaximumNumberOfPeels(6);
peelingPass->SetDepthFormat(vtkTextureObject::Float32);
peelingPass->SetOcclusionRatio(0.0);
peelingPass->SetTranslucentPass(basicPasses->GetTranslucentPass());
basicPasses->SetTranslucentPass(peelingPass);
auto fop = vtkSmartPointer<vtkFramebufferPass>::New();
fop->SetDepthFormat(vtkTextureObject::Float32);
fop->SetDelegatePass(basicPasses);
peelingPass->SetOpaqueZTexture(fop->GetDepthTexture());
peelingPass->SetOpaqueRGBATexture(fop->GetColorTexture());
// tell the renderer to use our render pass pipeline
vtkOpenGLRenderer *glrenderer =
vtkOpenGLRenderer::SafeDownCast(renderer);
glrenderer->SetPass(fop);
// Read obj
auto reader = vtkSmartPointer<vtkOBJReader>::New();
reader->SetFileName(objPath);
reader->Update();
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());
auto actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// Read jpeg
auto jpegReader = vtkSmartPointer<vtkJPEGReader>::New();
jpegReader->SetFileName(jpgPath);
jpegReader->Update();
auto texture = vtkSmartPointer<vtkTexture>::New();
texture->SetInputConnection(jpegReader->GetOutputPort());
actor->SetTexture(texture);
// Correct orientation
auto xf = vtkSmartPointer<vtkTransform>::New();
xf->RotateX(-90.0);
xf->RotateZ(+180.0);
actor->SetUserTransform(xf);
widget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
widget->SetOrientationMarker(actor);
widget->SetInteractor(renderWindow->GetInteractor());
widget->InteractiveOff();
widget->SetCurrentRenderer(renderer);
widget->EnabledOn();
widget->SetViewport(.81, .83, .96, .98);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment