-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkPhysicalCameraExample_VisualizeGeneral.cxx
executable file
·94 lines (78 loc) · 2.99 KB
/
vtkPhysicalCameraExample_VisualizeGeneral.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <vtkSmartPointer.h>
#include <vtkMatrix3x3.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkAxesActor.h>
#include <vtkImageData.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkMath.h>
#include <vtkLineSource.h>
#include "vtkPhysicalCamera.h"
void CreateRotationY(double degree, vtkSmartPointer<vtkMatrix3x3> R);
int main (int argc, char *argv[])
{
//setup camera parameters
vtkSmartPointer<vtkMatrix3x3> r =
vtkSmartPointer<vtkMatrix3x3>::New();
CreateRotationY(45, r);
double cameraCenter[3] = {0.0, 0.0, 5.0};
// create the camera
vtkSmartPointer<vtkPhysicalCamera> camera =
vtkSmartPointer<vtkPhysicalCamera>::New();
camera->SetR(r);
camera->SetCameraCenter(cameraCenter);
camera->SetFocalLength(200.0);
camera->UpdateCameraActor();
// Visualize
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(camera->GetAxesActor());
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
renderWindowInteractor->SetInteractorStyle( style );
//create the world coordinate axes
vtkSmartPointer<vtkAxesActor> originAxes =
vtkSmartPointer<vtkAxesActor>::New();
originAxes->SetXAxisLabelText("Xo");
originAxes->SetYAxisLabelText("Yo");
originAxes->SetZAxisLabelText("Zo");
renderer->AddActor(originAxes);
//create the orientation axes in the bottom left corner of the window
vtkSmartPointer<vtkAxesActor> axes =
vtkSmartPointer<vtkAxesActor>::New();
vtkSmartPointer<vtkOrientationMarkerWidget> orientationWidget =
vtkSmartPointer<vtkOrientationMarkerWidget>::New();
orientationWidget->SetOrientationMarker( axes );
orientationWidget->SetInteractor( renderWindowInteractor );
//orientationWidget->SetViewport( bottomLeftX, bottomLeftY, topLeftX, topLeftY );
orientationWidget->SetViewport( 0.0, 0.0, 0.2, 0.2 );
orientationWidget->EnabledOn();
//display and interact
renderer->ResetCamera();
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
void CreateRotationY(double degree, vtkSmartPointer<vtkMatrix3x3> R)
{
//Rx rotates the y-axis towards the z-axis
//Ry rotates the z-axis towards the x-axis
//Rz rotates the x-axis towards the y-axis
R->Identity();
double ang = vtkMath::RadiansFromDegrees(degree);
R->SetElement(0,0, cos(ang));
R->SetElement(0,2, sin(ang));
R->SetElement(2,0, -sin(ang));
R->SetElement(2,2, cos(ang));
}