Skip to content

Incomplete rendering when two renderers share a camera

Two renderers in a render window, share the same camera, in order to be moved together with user interaction.

At first rendering is OK, but if user moves the camera in the scene with the mouse, the front and the back of the actor disappear, as if the field of view of the camera was shortened.

image

VTK 7.1 and 8.0, on Windows 7 64 bit.

Example code to reproduce:

#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkCamera.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyData.h>
#include <vtkPlaneSource.h>
#include <vtkInteractorStyleTrackballCamera.h>

int main(int, char*[])
{
	auto plane_source = vtkSmartPointer<vtkPlaneSource>::New();

	auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(plane_source->GetOutputPort());
	
	auto actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	auto renderer0 = vtkSmartPointer<vtkRenderer>::New();
	auto renderer1 = vtkSmartPointer<vtkRenderer>::New();
	renderer0->SetLayer(0);
	renderer1->SetLayer(1);
	auto render_window = vtkSmartPointer<vtkRenderWindow>::New();
	render_window->SetNumberOfLayers(2);
	render_window->AddRenderer(renderer0);
	
	// The following line triggers rendering problems
	render_window->AddRenderer(renderer1);

	auto camera = vtkSmartPointer<vtkCamera>::New();
	renderer0->SetActiveCamera(camera);
	renderer1->SetActiveCamera(camera);

	renderer0->AddActor(actor);
	renderer0->ResetCamera();

	auto render_window_interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	auto trackball_style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();

	render_window_interactor->SetRenderWindow(render_window);
	render_window_interactor->SetInteractorStyle(trackball_style);

	render_window->Render();
	render_window_interactor->Start();

	return EXIT_SUCCESS;
}
Edited by Charles Brossollet