Blurred edges problem in VTK 7.1
Edges in VTK 7.1 look blurred compared to the clean look they had in VTK 7.0 and before. The problem is particulary visible when displaying an unstructured grid with extract edges like the one I attached to the issue. The code used was compiled with Visual Studio 2013 Update 5 and executed on Windows 7 64 bits. The graphics card is a nVidia GeForce Quadro 2000.
Here is a screenshot showing the differences between both versions of VTK:
Here is the code used:
#include <vtkXMLUnstructuredGridReader.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkUnstructuredGridGeometryFilter.h>
#include <vtkDataSetSurfaceFilter.h>
#include <vtkPolyDataNormals.h>
#include <vtkExtractEdges.h>
#include <vtkProperty.h>
int main(int argc, char *argv[])
{
if (argc != 2)
{
cout << "Required parameters: Filename" << endl;
return EXIT_FAILURE;
}
std::string inputFilename = argv[1];
vtkSmartPointer<vtkXMLUnstructuredGridReader> reader = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New();
reader->SetFileName(inputFilename.c_str());
reader->Update();
// Filter the geometry
vtkSmartPointer<vtkUnstructuredGridGeometryFilter> geometryFilter = vtkSmartPointer<vtkUnstructuredGridGeometryFilter>::New();
geometryFilter->SetInputConnection(reader->GetOutputPort());
// Convert to polydata using a surface filter
vtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();
surfaceFilter->UseStripsOff();
surfaceFilter->SetNonlinearSubdivisionLevel(1);
surfaceFilter->SetInputConnection(geometryFilter->GetOutputPort());
// Compute the normals
vtkSmartPointer<vtkPolyDataNormals> normals = vtkSmartPointer<vtkPolyDataNormals>::New();
normals->SetInputConnection(surfaceFilter->GetOutputPort());
normals->ComputePointNormalsOn();
normals->ComputeCellNormalsOff();
normals->SetFeatureAngle(60.0);
vtkSmartPointer<vtkPolyDataMapper> geometryMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
geometryMapper->SetInputConnection(normals->GetOutputPort());
geometryMapper->InterpolateScalarsBeforeMappingOn();
vtkSmartPointer<vtkActor> geometryActor = vtkSmartPointer<vtkActor>::New();
geometryActor->SetMapper(geometryMapper);
// Set the lighting parameters
geometryActor->GetProperty()->SetSpecularPower(0.0);
geometryActor->GetProperty()->SetAmbient(0.1);
geometryActor->GetProperty()->SetDiffuse(0.8);
// Extract edges
vtkSmartPointer<vtkExtractEdges> extractEdges = vtkSmartPointer<vtkExtractEdges>::New();
extractEdges->SetInputConnection(geometryFilter->GetOutputPort());
vtkSmartPointer<vtkPolyDataMapper> edgesMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
edgesMapper->SetInputConnection(extractEdges->GetOutputPort());
vtkSmartPointer<vtkActor> edgesActor = vtkSmartPointer<vtkActor>::New();
edgesActor->SetMapper(edgesMapper);
edgesActor->PickableOff();
edgesActor->GetProperty()->SetOpacity(0.5);
// Create the renderer
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
// Add actors to the renderer
renderer->AddActor(geometryActor);
renderer->AddActor(edgesActor);
renderer->SetBackground(.3, .6, .3);
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
And the volume mesh used (sorry for not providing a smaller one there...) usg0.7z