Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
camera.h
浏览该文件的文档.
1#ifndef DANDELION_SCENE_CAMERA_H
2#define DANDELION_SCENE_CAMERA_H
3
4#include <Eigen/Core>
5
6/*!
7 * \ingroup rendering
8 * \file scene/camera.h
9 */
10
11/*!
12 * \ingroup rendering
13 * \~chinese
14 * \brief 表示观察点的相机,既可以用于预览视角,也可以用于渲染视角。
15 *
16 * 这个类封装了从观察点、按一定视角去观察目标点的功能,可以完成相应的几何计算,
17 * 包括观察矩阵和投影矩阵 (view & projection matrix)。
18 * 预览场景中相机的显示不由 Camera 类自己负责,它的功能只是存储参数并构造变换矩阵。
19 * Dandelion 工作于渲染模式下时,Scene 对象将主动渲染一个相机视锥。
20 */
21struct Camera
22{
23public:
24 Camera() = delete;
25 /*!
26 * \~chinese
27 * \param position 相机位置(观察点)
28 * \param target 相机指向的目标点
29 * \param near_plane 可视范围近平面到观察坐标系原点的距离(正值)
30 * \param far_plane 可视范围远平面到观察坐标系原点的距离(正值)
31 * \param fov_y_degrees 高度方向(Y 方向)的视角大小,单位是角度
32 * \param aspect_ratio 宽高比,即视角的宽度 / 高度
33 */
34 Camera(const Eigen::Vector3f& position, const Eigen::Vector3f& target, float near_plane = 0.1f,
35 float far_plane = 10.0f, float fov_y_degrees = 45.0f, float aspect_ratio = 1.33f);
36 ~Camera() = default;
37 /*! \~chinese 获取该相机的 View 矩阵,对应观察变换。 */
38 Eigen::Matrix4f view();
39 /*! \~chinese 获取该相机的 Projection 矩阵,对应投影变换。 */
40 Eigen::Matrix4f projection();
41 /*! \~chinese 相机的位置(视点)。 */
42 Eigen::Vector3f position;
43 /*! \~chinese 相机看向的位置(目标点)。 */
44 Eigen::Vector3f target;
45 /*! \~chinese 可视范围近平面到观察坐标系原点的距离(正值)。 */
47 /*! \~chinese 可视范围远平面到观察坐标系原点的距离(正值)。 */
48 float far_plane;
49 /*! \~chinese Y 方向(上下)的视角大小。 */
51 /*! \~chinese 可视范围的宽度与高度之比。 */
53 /*! \~chinese 世界坐标系中的“上”方向向量,用于求相机坐标系的正交基。 */
54 Eigen::Vector3f world_up;
55};
56
57#endif // DANDELION_SCENE_CAMERA_H
float far_plane
定义 camera.h:48
float near_plane
定义 camera.h:46
Eigen::Matrix4f view()
定义 camera.cpp:24
float aspect_ratio
定义 camera.h:52
float fov_y_degrees
定义 camera.h:50
Eigen::Vector3f target
定义 camera.h:44
Eigen::Vector3f world_up
定义 camera.h:54
Eigen::Matrix4f projection()
定义 camera.cpp:44
Eigen::Vector3f position
定义 camera.h:42