39#ifndef EASY3D_RENDERER_CAMERA_H
40#define EASY3D_RENDERER_CAMERA_H
43#include <easy3d/core/types.h>
44#include <easy3d/core/signal.h>
45#include <easy3d/renderer/frame.h>
53 class ManipulatedCameraFrame;
54 class KeyFrameInterpolator;
131 enum Type { PERSPECTIVE, ORTHOGRAPHIC };
176 const mat3& R,
const vec3& t,
bool convert =
true);
298 return static_cast<float>(screenWidth_) /
static_cast<float>(screenHeight_);
344 virtual float zNear()
const;
345 virtual float zFar()
const;
387 projectionMatrixIsUpToDate_ =
false;
394 zClippingCoef_ = coef;
395 projectionMatrixIsUpToDate_ =
false;
474 int screenWidth_, screenHeight_;
479 float zClippingCoef_;
482 mat4 modelViewMatrix_;
483 bool modelViewMatrixIsUpToDate_;
484 mat4 projectionMatrix_;
485 bool projectionMatrixIsUpToDate_;
A perspective or orthographic camera.
Definition: camera.h:116
void setHorizontalFieldOfView(float hfov)
Sets the horizontalFieldOfView() of the Camera (in radians).
Definition: camera.h:361
void setSceneCenter(const vec3 ¢er)
Definition: camera.cpp:550
void showEntireScene() const
Definition: camera.cpp:709
virtual void getOrthoWidthHeight(float &halfWidth, float &halfHeight) const
Definition: camera.cpp:332
void setPivotPoint(const vec3 &point)
Definition: camera.cpp:559
float zClippingCoefficient() const
Returns the coefficient used to position the near and far clipping planes.
Definition: camera.h:342
Camera & operator=(const Camera &camera)
Definition: camera.cpp:132
KeyFrameInterpolator * keyframe_interpolator() const
Return the keyframe interpolator.
Definition: camera.h:250
void setOrientation(const quat &q) const
Definition: camera.cpp:869
int screenWidth() const
Returns the width (in pixels) of the Camera screen.
Definition: camera.h:306
mat4 modelViewProjectionMatrix() const
Definition: camera.cpp:510
int screenHeight() const
Returns the height (in pixels) of the Camera screen.
Definition: camera.h:313
Type
Enumerates the two possible types of Camera.
Definition: camera.h:131
void setZNearCoefficient(float coef)
Sets the zNearCoefficient() value.
Definition: camera.h:385
virtual float zFar() const
Definition: camera.cpp:245
void interpolateTo(const Frame &frame, float duration)
Perform keyframe interpolation to frame, done in duration second.
Definition: camera.cpp:691
void setFOVToFitScene()
Definition: camera.cpp:632
void setSceneRadius(float radius)
Definition: camera.cpp:530
void fitSphere(const vec3 ¢er, float radius) const
Definition: camera.cpp:739
quat orientation() const
Definition: camera.cpp:946
float sceneRadius() const
Returns the radius of the scene observed by the Camera.
Definition: camera.h:408
void interpolateToLookAt(const vec3 &point)
Perform keyframe interpolation to look at point.
Definition: camera.cpp:641
vec3 projectedCoordinatesOf(const vec3 &src, const Frame *frame=nullptr) const
Definition: camera.cpp:1255
vec3 cameraCoordinatesOf(const vec3 &src) const
Definition: camera.cpp:960
void set_modelview_matrix(const mat4 &mv)
Temporally change the modelview matrix.
Definition: camera.cpp:522
float aspectRatio() const
Returns the Camera aspect ratio defined by screenWidth() / screenHeight().
Definition: camera.h:297
const mat4 & projectionMatrix() const
Definition: camera.cpp:476
void setScreenWidthAndHeight(int width, int height)
Definition: camera.cpp:168
vec3 pivotPoint() const
Definition: camera.cpp:978
void convertClickToLine(int x, int y, vec3 &orig, vec3 &dir) const
Definition: camera.cpp:1333
void setFieldOfView(float fov)
Definition: camera.cpp:257
void set_projection_matrix(const mat4 &proj)
Temporally change the projection matrix.
Definition: camera.cpp:517
void setAspectRatio(float aspect)
Defines the Camera aspectRatio().
Definition: camera.h:376
void setType(Type type)
Definition: camera.cpp:272
void lookAt(const vec3 &target) const
Definition: camera.cpp:727
void setZClippingCoefficient(float coef)
Sets the zClippingCoefficient() value.
Definition: camera.h:393
void set_from_calibration(float fx, float fy, float skew, float cx, float cy, const mat3 &R, const vec3 &t, bool convert=true)
Defines the position(), orientation() and fieldOfView() of the camera from calibrated camera intrinsi...
Definition: camera.cpp:995
float zNearCoefficient() const
Returns the coefficient which is used to set zNear() when the Camera is inside the sphere defined by ...
Definition: camera.h:326
void computeModelViewMatrix()
Definition: camera.cpp:415
void setUpVector(const vec3 &up, bool noMove=true) const
Definition: camera.cpp:837
vec3 rightVector() const
Definition: camera.cpp:938
float fieldOfView() const
Returns the vertical field of view of the Camera (in radians).
Definition: camera.h:278
void fitBoundingBox(const vec3 &min, const vec3 &max) const
Definition: camera.cpp:759
vec3 unprojectedCoordinatesOf(const vec3 &src, const Frame *frame=nullptr) const
Definition: camera.cpp:1305
vec3 upVector() const
Definition: camera.cpp:915
Signal frame_modified
A signal indicating the frame has been modified.
Definition: camera.h:492
void setFrame(ManipulatedCameraFrame *const mcf)
Definition: camera.cpp:297
void interpolateToFitScene()
Perform keyframe interpolation to fit the scene bounding box.
Definition: camera.cpp:670
void centerScene() const
Definition: camera.cpp:716
void fitScreenRegion(int xmin, int ymin, int xmax, int ymax) const
Moves the Camera so that the rectangular screen region fits the screen.
Definition: camera.cpp:773
float pixelGLRatio(const vec3 &position) const
Definition: camera.cpp:588
void setViewDirection(const vec3 &direction) const
Definition: camera.cpp:879
Camera()
Definition: camera.cpp:57
void computeProjectionMatrix()
Definition: camera.cpp:361
const mat4 & modelViewMatrix() const
Definition: camera.cpp:498
void getFrustumPlanesCoefficients(float coef[6][4]) const
Definition: camera.cpp:1384
virtual ~Camera()
Definition: camera.cpp:99
vec3 position() const
Definition: camera.cpp:905
virtual float zNear() const
Definition: camera.cpp:215
void set_from_model_view_matrix(const mat4 &mv) const
Sets the Camera's position() and orientation() from an OpenGL ModelView matrix.
Definition: camera.cpp:981
vec3 viewDirection() const
Definition: camera.cpp:926
vec3 worldCoordinatesOf(const vec3 &src) const
Definition: camera.cpp:968
void setPosition(const vec3 &pos) const
Definition: camera.cpp:950
vec3 sceneCenter() const
Returns the position of the scene center, defined in the world coordinate system.
Definition: camera.h:418
Type type() const
Returns the Camera::Type of the Camera. Set by setType(). Mainly used by loadProjectionMatrix().
Definition: camera.h:267
float horizontalFieldOfView() const
Returns the horizontal field of view of the Camera (in radians).
Definition: camera.h:288
float distanceToSceneCenter() const
Definition: camera.cpp:313
void getFrustumPlanesCoefficients2(float coef[6][4]) const
Return the 6 plane equations of the Camera frustum.
Definition: camera.cpp:1473
ManipulatedCameraFrame * frame() const
Returns the ManipulatedFrame attached to the Camera.
Definition: camera.h:438
void setSceneBoundingBox(const vec3 &min, const vec3 &max)
Definition: camera.cpp:542
The Frame class represents a coordinate system, defined by a position and an orientation.
Definition: frame.h:152
A keyframe interpolator for animation generation.
Definition: key_frame_interpolator.h:104
A manipulated frame with camera specific mouse bindings.
Definition: manipulated_camera_frame.h:68
3x3 matrix. Extends Mat with 3D-specific functionality and constructors.
Definition: mat.h:1620
Base class for matrix types.
Definition: mat.h:66
A light-weight implementation of the simple signal-slot mechanism.
Definition: signal.h:56
Definition: collider.cpp:182
FT max()
Function returning maximum representable value for a given type.
FT min()
Function returning minimum representable value for a given type.