C++ / OpenCL Raytracer
camera.h
1 #ifndef CAMERA_H
2 #define CAMERA_H
3 
4 #include "ray.h"
5 
10 struct SDim {
11  int m_iX;
12  int m_iY;
13 };
14 
16 class Camera {
17 public:
18  Camera() {}
27  Camera(const SDim &dims, Vector3D lookFrom, Vector3D lookAt = Vector3D(0), Vector3D viewUp = Vector3D(0, 1, 0), double aperture = 0.1, double Fov = 40) : m_vOrigin(lookFrom), m_dAperture(aperture), m_vViewUp(viewUp), m_vLookAt(lookAt), m_dFov(Fov) {
28 
29  double dHalfHeight = tan(Fov*M_PI / 360);
30  double dHalfWidth = (dims.m_iX / dims.m_iY) * dHalfHeight;
31  double dFocusDist = (lookFrom - lookAt).Length();
32  m_vW = UnitVector(lookFrom - lookAt);
33  m_vU = UnitVector(viewUp.Cross(m_vW));
34  m_vV = m_vW.Cross(m_vU);
35  m_vLowerLeftCorner = m_vOrigin - dHalfWidth * dFocusDist * m_vU - dHalfHeight * dFocusDist * m_vV - dFocusDist * m_vW;
36  m_vHorizontal = 2 * dHalfWidth*dFocusDist*m_vU;
37  m_vVertical = 2 * dHalfHeight*dFocusDist*m_vV;
38  }
39  virtual Ray GetRay(double s, double t);
40 
48  Vector3D vP;
49  do {
50  vP = 2.0*Vector3D(drand48(), drand48(), 0) - Vector3D(1, 1, 0);
51  } while (vP.Dot(vP) >= 1.0);
52  return vP;
53  }
54 
64  double m_dAperture;
65  double m_dFov;
66 };
67 
68 #endif // CAMERA_H
static Vector3D RandomInUnitDisk()
Definition: camera.h:47
double m_dAperture
Aperture of camera lens.
Definition: camera.h:64
Camera(const SDim &dims, Vector3D lookFrom, Vector3D lookAt=Vector3D(0), Vector3D viewUp=Vector3D(0, 1, 0), double aperture=0.1, double Fov=40)
Definition: camera.h:27
double Dot(const Vector3D &v2)
Return dot product (double) of two Vector3D.
Definition: vector.h:60
int m_iX
Width in pixels.
Definition: camera.h:11
Definition: camera.h:16
Vector3D m_vOrigin
Vector3D center of grid.
Definition: camera.h:61
Vector3D m_vW
Vector3D cross product of distance and viewUp.
Definition: camera.h:57
Vector3D m_vU
Vector3D distance from camera origin to target.
Definition: camera.h:55
Vector3D Cross(const Vector3D &v2)
Definition: vector.h:63
Vector3D m_vLookAt
Vector3D center of grid.
Definition: camera.h:62
int m_iY
Height in pixels.
Definition: camera.h:12
Definition: vector.h:16
double m_dFov
Aperture of camera lens.
Definition: camera.h:65
Vector3D m_vViewUp
Vector3D center of grid.
Definition: camera.h:63
Vector3D m_vV
Vector3D distance adjusted for viewup.
Definition: camera.h:56
Vector3D m_vLowerLeftCorner
Vector3D lower left corner of grid.
Definition: camera.h:58
Vector3D m_vHorizontal
Vector3D width of grid.
Definition: camera.h:59
Vector3D m_vVertical
Vector3D height of grid.
Definition: camera.h:60
virtual Ray GetRay(double s, double t)
Definition: camera.cpp:9
Definition: camera.h:10
Definition: ray.h:7