There are two projection methods for camera setting, orthographic (paraller) projection and perspective projection, they have different view styles.
The light of sight in orthographic (paraller) projection is just like the light of sun. So the segment length keeps same at far and near position.
The model’s size is is related to the distance from eye to far view plane.
Here is a demo about parallel projection and perspective projection for vtkCamera object.
#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkActor.h>
#include <vtkCylinderSource.h>
#include <vtkCubeSource.h>
#include <vtkCamera.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindowInteractor.h>
#define vtkSPtr vtkSmartPointer
#define vtkSPtrNew(Var, Type) vtkSPtr<Type> Var = vtkSPtr<Type>::New();
using namespace std;
int main()
{
vtkSPtrNew( source, vtkCylinderSource );
source->SetHeight(10);
vtkSPtrNew( mapper, vtkPolyDataMapper );
mapper->SetInputConnection( source->GetOutputPort() );
vtkSPtrNew( actor, vtkActor );
actor->SetMapper( mapper );
vtkSPtrNew( renderer, vtkRenderer );
renderer->AddActor(actor);
renderer->SetBackground( 0, 0, 0 );
vtkSPtrNew( renderWindow, vtkRenderWindow );
renderWindow->AddRenderer( renderer );
vtkSPtrNew( renderWindowInteractor, vtkRenderWindowInteractor );
renderWindowInteractor->SetRenderWindow( renderWindow );
vtkSPtrNew( camera, vtkCamera );
camera->ParallelProjectionOn();
renderer->SetActiveCamera( camera );
renderer->ResetCamera();
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}
Let’s change it to perspective projection.
camera->ParallelProjectionOff();