29 #include <Eigen/Geometry> 34 class AxisAlignedBoundingBox;
37 namespace visualization {
42 enum class FovType { Vertical, Horizontal };
44 using Transform = Eigen::Transform<float, 3, Eigen::Affine>;
47 virtual ~
Camera() =
default;
49 virtual void SetProjection(
double fov,
77 virtual void SetProjection(
Projection projection,
85 virtual void SetProjection(
const Eigen::Matrix3d& intrinsics,
91 virtual void LookAt(
const Eigen::Vector3f& center,
92 const Eigen::Vector3f& eye,
93 const Eigen::Vector3f& up) = 0;
94 virtual void FromExtrinsics(
const Eigen::Matrix4d& extrinsics);
96 virtual void SetModelMatrix(
const Transform& view) = 0;
97 virtual void SetModelMatrix(
const Eigen::Vector3f& forward,
98 const Eigen::Vector3f& left,
99 const Eigen::Vector3f& up) = 0;
101 virtual double GetNear()
const = 0;
102 virtual double GetFar()
const = 0;
104 virtual double GetFieldOfView()
const = 0;
106 virtual FovType GetFieldOfViewType()
const = 0;
108 virtual Eigen::Vector3f GetPosition()
const = 0;
109 virtual Eigen::Vector3f GetForwardVector()
const = 0;
110 virtual Eigen::Vector3f GetLeftVector()
const = 0;
111 virtual Eigen::Vector3f GetUpVector()
const = 0;
112 virtual Transform GetModelMatrix()
const = 0;
113 virtual Transform GetViewMatrix()
const = 0;
115 virtual Transform GetCullingProjectionMatrix()
const = 0;
117 virtual Eigen::Vector3f
Unproject(
float x,
121 float view_height)
const = 0;
127 virtual Eigen::Vector2f GetNDC(
const Eigen::Vector3f& pt)
const = 0;
163 virtual void CopyFrom(
const Camera* camera) = 0;
169 static void SetupCameraAsPinholeCamera(
171 const Eigen::Matrix3d& intrinsic,
172 const Eigen::Matrix4d& extrinsic,
173 int intrinsic_width_px,
174 int intrinsic_height_px,
178 static float CalcNearPlane();
182 static float CalcFarPlane(
double top
Definition: Camera.h:138
Projection projection
Definition: Camera.h:134
Eigen::Transform< float, 3, Eigen::Projective > ProjectionMatrix
Definition: Camera.h:45
Projection
Definition: Camera.h:43
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:150
double fy
Definition: Camera.h:151
double right
Definition: Camera.h:136
double near_plane
Definition: Camera.h:139
double height
Definition: Camera.h:157
double fov
Definition: Camera.h:144
double cx
Definition: Camera.h:152
double aspect
Definition: Camera.h:145
GLMatrix4f LookAt(const Eigen::Vector3d &eye, const Eigen::Vector3d &lookat, const Eigen::Vector3d &up)
Definition: GLHelper.cpp:36
Eigen::Transform< float, 3, Eigen::Affine > Transform
Definition: Camera.h:44
double width
Definition: Camera.h:156
double far_plane
Definition: Camera.h:140
FovType
Definition: Camera.h:42
GLMatrix4f Perspective(double field_of_view_, double aspect, double z_near, double z_far)
Definition: GLHelper.cpp:55
Definition: PinholeCameraIntrinsic.cpp:35
double fx
Definition: Camera.h:150
bool is_intrinsic
Definition: Camera.h:131
int height
Definition: FilePCD.cpp:72
void Unproject(const core::Tensor &depth, utility::optional< std::reference_wrapper< const core::Tensor >> image_colors, core::Tensor &points, utility::optional< std::reference_wrapper< core::Tensor >> colors, const core::Tensor &intrinsics, const core::Tensor &extrinsics, float depth_scale, float depth_max, int64_t stride)
Definition: PointCloud.cpp:42
FovType fov_type
Definition: Camera.h:143
double bottom
Definition: Camera.h:137
GLMatrix4f Ortho(double left, double right, double bottom, double top, double z_near, double z_far)
Definition: GLHelper.cpp:70
double left
Definition: Camera.h:135
double cy
Definition: Camera.h:153
bool is_ortho
Definition: Camera.h:130
int width
Definition: FilePCD.cpp:71