diff --git a/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp index 4093d1096cacafe86b7828bd2e0f16ca25a22218..d6e72cec69f61196541cee7af4227436548b401a 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp @@ -39,7 +39,7 @@ m_capsuleGeometry(capsule) source->SetThetaResolution(10); // Setup Mapper & Actor - this->setUpMapper(source->GetOutputPort()); + this->setUpMapper(source->GetOutputPort(), true); this->updateActorTransform(); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp index 3b2565af842fee3397d993fbabe35eda2aa485b4..6d1fbce4679ceca03ceef0ea8f7a6431d69ee7b7 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp @@ -39,7 +39,7 @@ VTKCubeRenderDelegate::VTKCubeRenderDelegate(std::shared_ptr<Cube>cube) : source->SetZLength(width); // Setup Mapper & Actor - this->setUpMapper(source->GetOutputPort()); + this->setUpMapper(source->GetOutputPort(), true); this->updateActorTransform(); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp index 88db79d305f50fa2929bd487c6e52bfc537bce18..c04294f83f49100effdb26ee11cad9ac98b46b9a 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp @@ -53,7 +53,7 @@ VTKLineMeshRenderDelegate::VTKLineMeshRenderDelegate(std::shared_ptr<LineMesh> l lines->SetPoints(points); // Setup Mapper & Actor - this->setUpMapper(lines->GetOutputPort()); + this->setUpMapper(lines->GetOutputPort(), true); this->updateActorTransform(); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp index e48d464d4132ce74bd363a249d81be8070f9464c..1c4fa3779c70a90afd37caccc5cb79e6f0d2b219 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp @@ -35,7 +35,7 @@ VTKPlaneRenderDelegate::VTKPlaneRenderDelegate(std::shared_ptr<Plane>plane) : source->SetNormal(m_geometry->getNormal().data()); // Setup Mapper & Actor - this->setUpMapper(source->GetOutputPort()); + this->setUpMapper(source->GetOutputPort(), true); this->updateActorTransform(); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp index 217eb5c704c0bfcddf41cc1b43557bae47ab219b..cd2f793f47e425ea7aa13f8e8bb7b2545648f724 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp @@ -42,6 +42,7 @@ #include "vtkOpenGLPolyDataMapper.h" #include "vtkOpenGLVertexBufferObject.h" +#include "vtkPolyDataNormals.h" #include "vtkTriangleMeshPointNormals.h" #include "vtkTransform.h" @@ -102,18 +103,26 @@ VTKRenderDelegate::make_delegate(std::shared_ptr<Geometry>geom) } void -VTKRenderDelegate::setUpMapper(vtkAlgorithmOutput *source) +VTKRenderDelegate::setUpMapper(vtkAlgorithmOutput *source, const bool rigid) { // Add normals - auto normalGen = vtkSmartPointer<vtkTriangleMeshPointNormals>::New(); + vtkSmartPointer<vtkPolyDataAlgorithm> normalGen; + if (rigid) + { + normalGen = vtkSmartPointer<vtkPolyDataNormals>::New(); + vtkPolyDataNormals::SafeDownCast(normalGen)->SplittingOff(); + } + else + { + normalGen = vtkSmartPointer<vtkTriangleMeshPointNormals>::New(); + } normalGen->SetInputConnection(source); m_mapper->SetInputConnection(normalGen->GetOutputPort()); // Disable auto Shift & Scale which is slow for deformable objects // as it needs to compute a bounding box at every frame - auto mapper = dynamic_cast<vtkOpenGLPolyDataMapper*>(m_mapper.GetPointer()); - if(mapper) + if(auto mapper = vtkOpenGLPolyDataMapper::SafeDownCast(m_mapper.GetPointer())) { mapper->SetVBOShiftScaleMethod(vtkOpenGLVertexBufferObject::DISABLE_SHIFT_SCALE); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h index 6dd9d33d672136f67142fa7df4b56e49eb80f845..a9a46da3105839a0a08ecb11dc7b6a6105234313 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h +++ b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h @@ -57,7 +57,7 @@ public: /// /// \brief /// - void setUpMapper(vtkAlgorithmOutput *source); + void setUpMapper(vtkAlgorithmOutput *source, const bool rigid); /// /// \brief diff --git a/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp index f9069429bf6946920edfc302f8438960eac0ce6e..944381e61ae7f54023d2b89391ed3bd1115db38b 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp @@ -37,7 +37,7 @@ VTKSphereRenderDelegate::VTKSphereRenderDelegate(std::shared_ptr<Sphere>sphere) source->SetThetaResolution(20); // Setup Mapper & Actor - this->setUpMapper(source->GetOutputPort()); + this->setUpMapper(source->GetOutputPort(), true); this->updateActorTransform(); } diff --git a/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp index 40565d0d8014baadea0d3af6ded497a7a1f23476..83882f3b18583e54bbd80bf8300ac76f16302288 100644 --- a/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp +++ b/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp @@ -86,7 +86,7 @@ VTKSurfaceMeshRenderDelegate::VTKSurfaceMeshRenderDelegate(std::shared_ptr<Surfa source->SetOutput(polydata); // Setup Mapper & Actor - this->setUpMapper(source->GetOutputPort()); + this->setUpMapper(source->GetOutputPort(), false); this->updateActorTransform(); // Copy textures