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