Camera Class Reference

#include <camera.h>

Public Member Functions

EIGEN_MAKE_ALIGNED_OPERATOR_NEW Camera (void)
 
 Camera (const Camera &other)
 
virtual ~Camera ()
 
Cameraoperator= (const Camera &other)
 
void setViewport (uint offsetx, uint offsety, uint width, uint height)
 
void setViewport (uint width, uint height)
 
uint vpX (void) const
 
uint vpY (void) const
 
uint vpWidth (void) const
 
uint vpHeight (void) const
 
float fovY (void) const
 
void setFovY (float value)
 
void setPosition (const Eigen::Vector3f &pos)
 
const Eigen::Vector3f & position (void) const
 
void setOrientation (const Eigen::Quaternionf &q)
 
const Eigen::Quaternionforientation (void) const
 
void setFrame (const Frame &f)
 
const Frameframe (void) const
 
void setDirection (const Eigen::Vector3f &newDirection)
 
Eigen::Vector3f direction (void) const
 
void setUp (const Eigen::Vector3f &vectorUp)
 
Eigen::Vector3f up (void) const
 
Eigen::Vector3f right (void) const
 
void setTarget (const Eigen::Vector3f &target)
 
const Eigen::Vector3f & target (void)
 
const Eigen::Affine3fviewMatrix (void) const
 
const Eigen::Matrix4f & projectionMatrix (void) const
 
void rotateAroundTarget (const Eigen::Quaternionf &q)
 
void localRotate (const Eigen::Quaternionf &q)
 
void zoom (float d)
 
void localTranslate (const Eigen::Vector3f &t)
 
void activateGL (void)
 
Eigen::Vector3f unProject (const Eigen::Vector2f &uv, float depth, const Eigen::Matrix4f &invModelview) const
 
Eigen::Vector3f unProject (const Eigen::Vector2f &uv, float depth) const
 

Protected Member Functions

void updateViewMatrix (void) const
 
void updateProjectionMatrix (void) const
 

Protected Attributes

uint mVpX
 
uint mVpY
 
uint mVpWidth
 
uint mVpHeight
 
Frame mFrame
 
Eigen::Affine3f mViewMatrix
 
Eigen::Matrix4f mProjectionMatrix
 
bool mViewIsUptodate
 
bool mProjIsUptodate
 
Eigen::Vector3f mTarget
 
float mFovY
 
float mNearDist
 
float mFarDist
 

Constructor & Destructor Documentation

◆ Camera() [1/2]

Camera::Camera ( void  )
18  : mViewIsUptodate(false), mProjIsUptodate(false) {
19  mViewMatrix.setIdentity();
20 
21  mFovY = M_PI / 3.;
22  mNearDist = 1.;
23  mFarDist = 50000.;
24 
25  mVpX = 0;
26  mVpY = 0;
27 
28  setPosition(Vector3f::Constant(100.));
30 }
void setTarget(const Eigen::Vector3f &target)
Definition: camera.cpp:95
uint mVpX
Definition: camera.h:92
Eigen::Affine3f mViewMatrix
Definition: camera.h:97
uint mVpY
Definition: camera.h:92
bool mProjIsUptodate
Definition: camera.h:101
float mNearDist
Definition: camera.h:107
float mFovY
Definition: camera.h:106
void setPosition(const Eigen::Vector3f &pos)
Definition: camera.cpp:103
float mFarDist
Definition: camera.h:108
bool mViewIsUptodate
Definition: camera.h:100
#define M_PI
Definition: main.h:121
double Zero
Definition: pseudosolid_node_update_elements.cc:35

References M_PI, mFarDist, mFovY, mNearDist, mViewMatrix, mVpX, mVpY, setPosition(), setTarget(), and oomph::PseudoSolidHelper::Zero.

◆ Camera() [2/2]

Camera::Camera ( const Camera other)
52 { *this = other; }

◆ ~Camera()

Camera::~Camera ( )
virtual
54 {}

Member Function Documentation

◆ activateGL()

void Camera::activateGL ( void  )

Setup OpenGL matrices and viewport

197  {
198  glViewport(vpX(), vpY(), vpWidth(), vpHeight());
199  gpu.loadMatrix(projectionMatrix(), GL_PROJECTION);
200  gpu.loadMatrix(viewMatrix().matrix(), GL_MODELVIEW);
201 }
uint vpHeight(void) const
Definition: camera.h:49
uint vpX(void) const
Definition: camera.h:46
uint vpWidth(void) const
Definition: camera.h:48
const Eigen::Matrix4f & projectionMatrix(void) const
Definition: camera.cpp:192
const Eigen::Affine3f & viewMatrix(void) const
Definition: camera.cpp:168
uint vpY(void) const
Definition: camera.h:47
void loadMatrix(const Eigen::Matrix< Scalar, 4, 4, Flags_, 4, 4 > &mat, GLenum matrixTarget)
Definition: gpuhelper.h:151
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
GpuHelper gpu
Definition: gpuhelper.cpp:18

References gpu, GpuHelper::loadMatrix(), matrix(), projectionMatrix(), viewMatrix(), vpHeight(), vpWidth(), vpX(), and vpY().

◆ direction()

Vector3f Camera::direction ( void  ) const
77 { return -(orientation() * Vector3f::UnitZ()); }
const Eigen::Quaternionf & orientation(void) const
Definition: camera.h:58

References orientation().

Referenced by localRotate(), and zoom().

◆ fovY()

float Camera::fovY ( void  ) const
inline
51 { return mFovY; }

References mFovY.

◆ frame()

const Frame& Camera::frame ( void  ) const
inline
61 { return mFrame; }
Frame mFrame
Definition: camera.h:95

References mFrame.

◆ localRotate()

void Camera::localRotate ( const Eigen::Quaternionf q)
135  {
136  float dist = (position() - mTarget).norm();
138  mTarget = position() + dist * direction();
139  mViewIsUptodate = false;
140 }
Eigen::Vector3f mTarget
Definition: camera.h:104
Eigen::Vector3f direction(void) const
Definition: camera.cpp:77
void setOrientation(const Eigen::Quaternionf &q)
Definition: camera.cpp:108
const Eigen::Vector3f & position(void) const
Definition: camera.h:55
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019

References direction(), mTarget, mViewIsUptodate, orientation(), position(), Eigen::numext::q, and setOrientation().

◆ localTranslate()

void Camera::localTranslate ( const Eigen::Vector3f &  t)
150  {
151  Vector3f trans = orientation() * t;
154 
155  mViewIsUptodate = false;
156 }
char * trans
Definition: level2_impl.h:240
t
Definition: plotPSD.py:36

References mTarget, mViewIsUptodate, orientation(), position(), setPosition(), setTarget(), plotPSD::t, and trans.

◆ operator=()

Camera & Camera::operator= ( const Camera other)
32  {
33  mViewIsUptodate = false;
34  mProjIsUptodate = false;
35 
36  mVpX = other.mVpX;
37  mVpY = other.mVpY;
38  mVpWidth = other.mVpWidth;
39  mVpHeight = other.mVpHeight;
40 
41  mTarget = other.mTarget;
42  mFovY = other.mFovY;
43  mNearDist = other.mNearDist;
44  mFarDist = other.mFarDist;
45 
46  mViewMatrix = other.mViewMatrix;
48 
49  return *this;
50 }
uint mVpHeight
Definition: camera.h:93
Eigen::Matrix4f mProjectionMatrix
Definition: camera.h:98
uint mVpWidth
Definition: camera.h:93

References mFarDist, mFovY, mNearDist, mProjectionMatrix, mProjIsUptodate, mTarget, mViewIsUptodate, mViewMatrix, mVpHeight, mVpWidth, mVpX, and mVpY.

◆ orientation()

const Eigen::Quaternionf& Camera::orientation ( void  ) const
inline
58 { return mFrame.orientation; }
Eigen::Quaternionf orientation
Definition: camera.h:27

References mFrame, and Frame::orientation.

Referenced by direction(), localRotate(), localTranslate(), right(), up(), and updateViewMatrix().

◆ position()

const Eigen::Vector3f& Camera::position ( void  ) const
inline
55 { return mFrame.position; }
Eigen::Vector3f position
Definition: camera.h:28

References mFrame, and Frame::position.

Referenced by localRotate(), localTranslate(), setTarget(), updateViewMatrix(), and zoom().

◆ projectionMatrix()

const Matrix4f & Camera::projectionMatrix ( void  ) const
192  {
194  return mProjectionMatrix;
195 }
void updateProjectionMatrix(void) const
Definition: camera.cpp:173

References mProjectionMatrix, and updateProjectionMatrix().

Referenced by activateGL().

◆ right()

Vector3f Camera::right ( void  ) const
79 { return orientation() * Vector3f::UnitX(); }

References orientation().

◆ rotateAroundTarget()

void Camera::rotateAroundTarget ( const Eigen::Quaternionf q)
118  {
119  Matrix4f mrot, mt, mtm;
120 
121  // update the transform matrix
123  Vector3f t = mViewMatrix * mTarget;
124 
126 
127  Quaternionf qa(mViewMatrix.linear());
128  qa = qa.conjugate();
129  setOrientation(qa);
130  setPosition(-(qa * mViewMatrix.translation()));
131 
132  mViewIsUptodate = true;
133 }
void updateViewMatrix(void) const
Definition: camera.cpp:158
Translation< float, 3 > Translation3f
Definition: Translation.h:174

References mTarget, mViewIsUptodate, mViewMatrix, Eigen::numext::q, setOrientation(), setPosition(), plotPSD::t, and updateViewMatrix().

◆ setDirection()

void Camera::setDirection ( const Eigen::Vector3f &  newDirection)
81  {
82  // TODO implement it computing the rotation between newDirection and current dir ?
83  Vector3f up = this->up();
84 
85  Matrix3f camAxes;
86 
87  camAxes.col(2) = (-newDirection).normalized();
88  camAxes.col(0) = up.cross(camAxes.col(2)).normalized();
89  camAxes.col(1) = camAxes.col(2).cross(camAxes.col(0)).normalized();
90  setOrientation(Quaternionf(camAxes));
91 
92  mViewIsUptodate = false;
93 }
Eigen::Vector3f up(void) const
Definition: camera.cpp:78
Quaternion< float > Quaternionf
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:384

References mViewIsUptodate, setOrientation(), and up().

Referenced by setTarget().

◆ setFovY()

void Camera::setFovY ( float  value)
72  {
73  mFovY = value;
74  mProjIsUptodate = false;
75 }
squared absolute value
Definition: GlobalFunctions.h:87

References mFovY, mProjIsUptodate, and Eigen::value.

◆ setFrame()

void Camera::setFrame ( const Frame f)
113  {
114  mFrame = f;
115  mViewIsUptodate = false;
116 }
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237

References f(), mFrame, and mViewIsUptodate.

◆ setOrientation()

void Camera::setOrientation ( const Eigen::Quaternionf q)
108  {
109  mFrame.orientation = q;
110  mViewIsUptodate = false;
111 }

References mFrame, mViewIsUptodate, Frame::orientation, and Eigen::numext::q.

Referenced by localRotate(), rotateAroundTarget(), and setDirection().

◆ setPosition()

void Camera::setPosition ( const Eigen::Vector3f &  pos)
103  {
104  mFrame.position = p;
105  mViewIsUptodate = false;
106 }
float * p
Definition: Tutorial_Map_using.cpp:9

References mFrame, mViewIsUptodate, p, and Frame::position.

Referenced by Camera(), localTranslate(), rotateAroundTarget(), and zoom().

◆ setTarget()

void Camera::setTarget ( const Eigen::Vector3f &  target)
95  {
96  mTarget = target;
97  if (!mTarget.isApprox(position())) {
98  Vector3f newDirection = mTarget - position();
99  setDirection(newDirection.normalized());
100  }
101 }
const Eigen::Vector3f & target(void)
Definition: camera.h:70
void setDirection(const Eigen::Vector3f &newDirection)
Definition: camera.cpp:81

References mTarget, position(), setDirection(), and target().

Referenced by Camera(), and localTranslate().

◆ setUp()

void Camera::setUp ( const Eigen::Vector3f &  vectorUp)

◆ setViewport() [1/2]

void Camera::setViewport ( uint  offsetx,
uint  offsety,
uint  width,
uint  height 
)
56  {
57  mVpX = offsetx;
58  mVpY = offsety;
59  mVpWidth = width;
60  mVpHeight = height;
61 
62  mProjIsUptodate = false;
63 }
double height(const double &x)
Height of domain.
Definition: simple_spine_channel.cc:429

References Global_Physical_Variables::height(), mProjIsUptodate, mVpHeight, mVpWidth, mVpX, and mVpY.

◆ setViewport() [2/2]

void Camera::setViewport ( uint  width,
uint  height 
)
65  {
66  mVpWidth = width;
67  mVpHeight = height;
68 
69  mProjIsUptodate = false;
70 }

References Global_Physical_Variables::height(), mProjIsUptodate, mVpHeight, and mVpWidth.

◆ target()

const Eigen::Vector3f& Camera::target ( void  )
inline
70 { return mTarget; }

References mTarget.

Referenced by setTarget().

◆ unProject() [1/2]

Eigen::Vector3f Camera::unProject ( const Eigen::Vector2f &  uv,
float  depth 
) const

◆ unProject() [2/2]

Eigen::Vector3f Camera::unProject ( const Eigen::Vector2f &  uv,
float  depth,
const Eigen::Matrix4f &  invModelview 
) const

◆ up()

Vector3f Camera::up ( void  ) const
78 { return orientation() * Vector3f::UnitY(); }

References orientation().

Referenced by setDirection().

◆ updateProjectionMatrix()

void Camera::updateProjectionMatrix ( void  ) const
protected
173  {
174  if (!mProjIsUptodate) {
175  mProjectionMatrix.setIdentity();
176  float aspect = float(mVpWidth) / float(mVpHeight);
177  float theta = mFovY * 0.5;
178  float range = mFarDist - mNearDist;
179  float invtan = 1. / tan(theta);
180 
181  mProjectionMatrix(0, 0) = invtan / aspect;
182  mProjectionMatrix(1, 1) = invtan;
183  mProjectionMatrix(2, 2) = -(mNearDist + mFarDist) / range;
184  mProjectionMatrix(3, 2) = -1;
185  mProjectionMatrix(2, 3) = -2 * mNearDist * mFarDist / range;
186  mProjectionMatrix(3, 3) = 0;
187 
188  mProjIsUptodate = true;
189  }
190 }
double theta
Definition: two_d_biharmonic.cc:236
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 tan(const bfloat16 &a)
Definition: BFloat16.h:633

References mFarDist, mFovY, mNearDist, mProjectionMatrix, mProjIsUptodate, mVpHeight, mVpWidth, Eigen::bfloat16_impl::tan(), and BiharmonicTestFunctions2::theta.

Referenced by projectionMatrix().

◆ updateViewMatrix()

void Camera::updateViewMatrix ( void  ) const
protected
158  {
159  if (!mViewIsUptodate) {
160  Quaternionf q = orientation().conjugate();
161  mViewMatrix.linear() = q.toRotationMatrix();
162  mViewMatrix.translation() = -(mViewMatrix.linear() * position());
163 
164  mViewIsUptodate = true;
165  }
166 }

References mViewIsUptodate, mViewMatrix, orientation(), position(), and Eigen::numext::q.

Referenced by rotateAroundTarget(), and viewMatrix().

◆ viewMatrix()

const Affine3f & Camera::viewMatrix ( void  ) const
168  {
170  return mViewMatrix;
171 }

References mViewMatrix, and updateViewMatrix().

Referenced by activateGL().

◆ vpHeight()

uint Camera::vpHeight ( void  ) const
inline
49 { return mVpHeight; }

References mVpHeight.

Referenced by activateGL().

◆ vpWidth()

uint Camera::vpWidth ( void  ) const
inline
48 { return mVpWidth; }

References mVpWidth.

Referenced by activateGL().

◆ vpX()

uint Camera::vpX ( void  ) const
inline
46 { return mVpX; }

References mVpX.

Referenced by activateGL().

◆ vpY()

uint Camera::vpY ( void  ) const
inline
47 { return mVpY; }

References mVpY.

Referenced by activateGL().

◆ zoom()

void Camera::zoom ( float  d)
142  {
143  float dist = (position() - mTarget).norm();
144  if (dist > d) {
145  setPosition(position() + direction() * d);
146  mViewIsUptodate = false;
147  }
148 }

References direction(), mTarget, mViewIsUptodate, position(), and setPosition().

Member Data Documentation

◆ mFarDist

float Camera::mFarDist
protected

◆ mFovY

float Camera::mFovY
protected

◆ mFrame

Frame Camera::mFrame
protected

◆ mNearDist

float Camera::mNearDist
protected

◆ mProjectionMatrix

Eigen::Matrix4f Camera::mProjectionMatrix
mutableprotected

◆ mProjIsUptodate

bool Camera::mProjIsUptodate
mutableprotected

◆ mTarget

Eigen::Vector3f Camera::mTarget
protected

◆ mViewIsUptodate

◆ mViewMatrix

Eigen::Affine3f Camera::mViewMatrix
mutableprotected

◆ mVpHeight

uint Camera::mVpHeight
protected

◆ mVpWidth

uint Camera::mVpWidth
protected

◆ mVpX

uint Camera::mVpX
protected

Referenced by Camera(), operator=(), setViewport(), and vpX().

◆ mVpY

uint Camera::mVpY
protected

Referenced by Camera(), operator=(), setViewport(), and vpY().


The documentation for this class was generated from the following files: