/
vtkPhysicalCameraExample_GeneralCameraBackwardProjection.cxx
executable file
·63 lines (52 loc) · 1.71 KB
/
vtkPhysicalCameraExample_GeneralCameraBackwardProjection.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
#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 <vtkJPEGWriter.h>
#include <vtkCellArray.h>
#include <vtkMath.h>
#include <vtkPointSource.h>
#include <vtkCameraActor.h>
#include <vtkCamera.h>
#include "vtkPhysicalCamera.h"
void CreateRotationY(double degree, vtkSmartPointer<vtkMatrix3x3> R);
int main (int argc, char *argv[])
{
//Setup camera parameters
//Create a rotation matrix
vtkSmartPointer<vtkMatrix3x3> r =
vtkSmartPointer<vtkMatrix3x3>::New();
CreateRotationY(45, r);
double cameraCenter[3] = {0.0, 0.0, 0.0};
// Create a camera
vtkSmartPointer<vtkPhysicalCamera> camera =
vtkSmartPointer<vtkPhysicalCamera>::New();
camera->SetR(r);
camera->SetCameraCenter(cameraCenter);
camera->SetFocalLength(200.0);
double pix[2] = {400.0, 282.84};
double ray[3];
camera->GetRay(pix, ray);
cout << "The ray through pixel (" << pix[0] << "," << pix[1] << " is (" << ray[0] << " " << ray[1] << " " << ray[2] << ")" << endl;
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));
}