[vtkusers] Bug?:5.4.0 performance versus 5.0

Jon Waite JonW at pathsurg.com
Mon May 11 14:40:39 EDT 2009


Hello,

When rendering an actor with >50,000 points with scalars on, and
transparency < 1, 5.4.0 renders < 1 fps versus the same code linked to
vtk 5.0 which performs normally.  Attached is the example code, if run
against each library, the bug is portrayed.

Thanks,
Jon

----------------------------------

// VtkScalarBug.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "vtkRenderWindowInteractor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkActor.h"

#include "vtkPolyDataMapper.h"
#include "vtkLookupTable.h"
#include "vtkCamera.h"

#include "vtkWin32OpenGLRenderWindow.h"
#include "vtkWin32RenderWindowInteractor.h"

#include "vtkProperty.h"
#include "vtkPolyDataReader.h"
#include "vtkFloatArray.h"
#include "vtkPointData.h"
#include "vtkPlaneSource.h"
#include "vtkSphereSource.h"


int _tmain(int argc, _TCHAR* argv[])
{
	vtkWin32OpenGLRenderWindow *renWin = vtkWin32OpenGLRenderWindow::New();
	vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
	iren->SetRenderWindow(renWin);
	iren->Initialize();

	vtkRenderer *renderer = vtkRenderer::New();
	renWin->AddRenderer(renderer);
	if(1)
	{
		if (1)
		{
			vtkSphereSource* sphere = vtkSphereSource::New();
			const int res = 500;
			sphere->SetPhiResolution(res);
			sphere->SetThetaResolution(res);
			sphere->Update();
			const double setval = 0.8;

			vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
			mapper->SetInput(sphere->GetOutput());
			sphere->Delete();

			mapper->SetScalarRange(0,setval);

			vtkLookupTable* lut = vtkLookupTable::New();
			lut->SetNumberOfColors(2);
			lut->Build();
			lut->SetTableValue(1,setval,0,0);
			lut->SetTableValue(0,setval,setval,setval);	

			mapper->SetLookupTable(lut);
			lut->Delete();

			vtkPolyData* SpherePoly = mapper->GetInput();

			int NumLiverPoints = SpherePoly->GetNumberOfPoints();
			vtkFloatArray* scalars = vtkFloatArray::New();
			const int fullrange = 50;
			const int half = fullrange/2;
			for (int i=0;i<NumLiverPoints;i++)
			{
				scalars->InsertTuple1(i,(i%fullrange)>half?0:setval);
			}
			SpherePoly->GetPointData()->SetScalars(scalars);
			scalars->Delete();
			SpherePoly->Modified();

			vtkActor* cubeA = vtkActor::New();
			renderer->AddActor(cubeA);
			cubeA->SetMapper(mapper);
			cubeA->GetProperty()->SetOpacity(0.5);
			mapper->Delete();
			cubeA->Delete();
		}

		renderer->ResetCamera();
		renderer->Render();
	}

	iren->Start();

	renderer->Delete();
	renWin->Delete();
	iren->Delete();

	return 0;
}



More information about the vtkusers mailing list