Created
August 4, 2017 14:30
-
-
Save agirault/7a1f48a6f3f208b149ec4e4c99e492ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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