Skip to content
Snippets Groups Projects
Commit 5b2ce23a authored by Alexis Girault's avatar Alexis Girault
Browse files

ENH: skip compute bounds in vtk

1) RemoveCuller
2) Disable VBO Shift&Scale check

Also use `setUpMapper` (previously setActorMapper) more
consistently.
parent c8dbe384
No related branches found
No related tags found
No related merge requests found
......@@ -38,7 +38,8 @@ VTKCubeRenderDelegate::VTKCubeRenderDelegate(std::shared_ptr<Cube>cube) :
source->SetYLength(width);
source->SetZLength(width);
this->setActorMapper(source->GetOutputPort());
// Setup Mapper & Actor
this->setUpMapper(source->GetOutputPort());
this->updateActorTransform();
}
......
......@@ -52,14 +52,8 @@ VTKLineMeshRenderDelegate::VTKLineMeshRenderDelegate(std::shared_ptr<LineMesh> l
auto lines = vtkSmartPointer<vtkLineSource>::New();
lines->SetPoints(points);
//Create a mapper and actor
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(lines->GetOutputPort());
// Actor
m_actor->SetMapper(mapper);
// Transform
// Setup Mapper & Actor
this->setUpMapper(lines->GetOutputPort());
this->updateActorTransform();
}
......
......@@ -34,7 +34,8 @@ VTKPlaneRenderDelegate::VTKPlaneRenderDelegate(std::shared_ptr<Plane>plane) :
source->SetCenter(WORLD_ORIGIN[0], WORLD_ORIGIN[1], WORLD_ORIGIN[2]);
source->SetNormal(UP_VECTOR[0], UP_VECTOR[1], UP_VECTOR[2]);
this->setActorMapper(source->GetOutputPort());
// Setup Mapper & Actor
this->setUpMapper(source->GetOutputPort());
this->updateActorTransform();
}
......
......@@ -37,7 +37,8 @@
#include "imstkVTKLineMeshRenderDelegate.h"
#include "imstkVTKTetrahedralMeshRenderDelegate.h"
#include "vtkPolyDataMapper.h"
#include "vtkOpenGLPolyDataMapper.h"
#include "vtkOpenGLVertexBufferObject.h"
#include "vtkPolyDataNormals.h"
#include "vtkTransform.h"
......@@ -94,17 +95,24 @@ VTKRenderDelegate::make_delegate(std::shared_ptr<Geometry>geom)
}
void
VTKRenderDelegate::setActorMapper(vtkAlgorithmOutput *source)
VTKRenderDelegate::setUpMapper(vtkAlgorithmOutput *source)
{
// Add normals
/// TODO : replace by vtkTrianglePointsNormals when available
auto normalGen = vtkSmartPointer<vtkPolyDataNormals>::New();
normalGen->SetInputConnection(source);
normalGen->SplittingOff();
normalGen->ConsistencyOff();
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(normalGen->GetOutputPort());
m_mapper->SetInputConnection(normalGen->GetOutputPort());
m_actor->SetMapper(mapper);
// 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)
{
mapper->SetVBOShiftScaleMethod(vtkOpenGLVertexBufferObject::DISABLE_SHIFT_SCALE);
}
}
vtkSmartPointer<vtkActor>
......@@ -136,8 +144,6 @@ VTKRenderDelegate::updateActorTransform()
angleAxis.axis()[1],
angleAxis.axis()[2]);
m_transform->Translate(pos[0], pos[1], pos[2]);
m_actor->SetUserTransform(m_transform);
}
} // imstk
......@@ -29,6 +29,7 @@
#include "vtkSmartPointer.h"
#include "vtkAlgorithmOutput.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkTransform.h"
namespace imstk
......@@ -56,7 +57,7 @@ public:
///
/// \brief
///
void setActorMapper(vtkAlgorithmOutput *source);
void setUpMapper(vtkAlgorithmOutput *source);
///
/// \brief
......@@ -82,10 +83,18 @@ protected:
///
/// \brief Default constructor (protected)
///
VTKRenderDelegate() {}
vtkSmartPointer<vtkActor> m_actor = vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkTransform> m_transform = vtkSmartPointer<vtkTransform>::New();
VTKRenderDelegate()
{
m_actor = vtkSmartPointer<vtkActor>::New();
m_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
m_transform = vtkSmartPointer<vtkTransform>::New();
m_actor->SetMapper(m_mapper);
m_actor->SetUserTransform(m_transform);
}
vtkSmartPointer<vtkActor> m_actor;
vtkSmartPointer<vtkPolyDataMapper> m_mapper;
vtkSmartPointer<vtkTransform> m_transform;
};
}
......
......@@ -36,7 +36,8 @@ VTKSphereRenderDelegate::VTKSphereRenderDelegate(std::shared_ptr<Sphere>sphere)
source->SetPhiResolution(20);
source->SetThetaResolution(20);
this->setActorMapper(source->GetOutputPort());
// Setup Mapper & Actor
this->setUpMapper(source->GetOutputPort());
this->updateActorTransform();
}
......
......@@ -27,6 +27,7 @@
#include <vtkPolyDataNormals.h>
#include <vtkPolyDataMapper.h>
#include <vtkPoints.h>
#include <vtkTrivialProducer.h>
#include <vtkDoubleArray.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
......@@ -73,14 +74,13 @@ VTKSurfaceMeshRenderDelegate::VTKSurfaceMeshRenderDelegate(std::shared_ptr<Surfa
polydata->SetPoints(points);
polydata->SetPolys(cells);
// Compute Normals
auto normalGen = vtkSmartPointer<vtkPolyDataNormals>::New();
normalGen->SetInputData(polydata);
normalGen->SplittingOff();
// Create connection source
auto source = vtkSmartPointer<vtkTrivialProducer>::New();
source->SetOutput(polydata);
// Mapper
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(normalGen->GetOutputPort());
// Setup Mapper & Actor
this->setUpMapper(source->GetOutputPort());
this->updateActorTransform();
// Copy textures
int unit = 0;
......@@ -117,17 +117,11 @@ VTKSurfaceMeshRenderDelegate::VTKSurfaceMeshRenderDelegate(std::shared_ptr<Surfa
texture->SetWrapMode(vtkTexture::VTKTextureWrapMode::ClampToBorder);
// Link textures
mapper->MapDataArrayToMultiTextureAttribute(unit, tCoordsName.c_str(),
m_mapper->MapDataArrayToMultiTextureAttribute(unit, tCoordsName.c_str(),
vtkDataObject::FIELD_ASSOCIATION_POINTS);
m_actor->GetProperty()->SetTexture(unit, texture);
unit++;
}
// Actor
m_actor->SetMapper(mapper);
// Transform
this->updateActorTransform();
}
void
......
......@@ -28,6 +28,7 @@
#include "vtkLightActor.h"
#include "vtkCameraActor.h"
#include "vtkAxesActor.h"
#include "vtkCullerCollection.h"
#include "g3log/g3log.hpp"
......@@ -91,6 +92,13 @@ VTKRenderer::VTKRenderer(std::shared_ptr<Scene> scene)
m_vtkRenderer->SetBackground2(157.0/255.0*0.66, 186/255.0*0.66, 192.0/255.0*0.66);
m_vtkRenderer->GradientBackgroundOn();
///TODO : only on deformable objects with UseBounds (need vtk update)
// Remove culling
if (auto culler = m_vtkRenderer->GetCullers()->GetLastItem())
{
m_vtkRenderer->RemoveCuller(culler);
}
this->setup(Mode::SIMULATION);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment