Dandelion 2.0.0
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
rasterizer_renderer.h
浏览该文件的文档.
1#ifndef DANDELION_RENDER_RASTERIZER_RENDERER_H
2#define DANDELION_RENDER_RASTERIZER_RENDERER_H
3
4#include <list>
5#include <queue>
6
7#include <Eigen/Core>
8#include <Eigen/Geometry>
9
10#include "../scene/light.h"
11#include "../scene/camera.h"
12#include "graphics_interface.h"
13
14/*!
15 * \file render/rasterizer_renderer.h
16 * \ingroup rendering
17 * \~chinese
18 * \brief 光栅化渲染器中顶点处理、片元处理两个阶段的实现。
19 */
20
21/*!
22 * \ingroup rendering
23 * \~chinese
24 * \brief 负责执行顶点着色器的工作线程。
25 */
27{
28public:
29
30 /*!
31 * \~chinese
32 * \brief 输入顶点数据到顶点处理队列中
33 *
34 * \param positions 顶点位置坐标
35 * \param normals 顶点法线向量
36 */
37 void input_vertices(const Eigen::Vector4f& positions, const Eigen::Vector3f& normals);
38
39 /*!
40 * \~chinese
41 * \brief 顶点着色器函数指针,指向用于处理顶点数据的着色器函数
42 * \param payload 待着色的顶点数据
43 *
44 * \return 着色后的顶点数据
45 */
47
48 /*!
49 * \~chinese
50 * \brief 负责执行顶点着色器的工作线程
51 *
52 * 不断读取顶点队列中的顶点数据,执行顶点着色器,并将结果存储到顶点着色输出队列中
53 *
54 */
55 void worker_thread();
56
57private:
58
59 /*! \~chinese 存储待着色顶点数据的队列 */
60 std::queue<VertexShaderPayload> vertex_queue;
61 /*! \~chinese 保护顶点队列的互斥锁 */
62 std::mutex queue_mutex;
63};
64
65/*!
66 * \ingroup rendering
67 * \~chinese
68 * \brief 负责执行片元着色器的工作线程。
69 */
71{
72public:
73
74 /*!
75 * \~chinese
76 * \brief 负责执行片元着色器的工作线程
77 *
78 * 不断读取光栅化输出队列中的顶点数据,执行片元着色器,计算并设置像素颜色
79 *
80 */
81 void worker_thread();
82
83 /*!
84 * \~chinese
85 * \brief 片元着色器函数指针,指向用于计算片元颜色的着色器函数
86 * \param payload 片元数据
87 * \param material 材质属性
88 * \param lights 场景中的光源列表
89 * \param camera 场景相机
90 *
91 * \return 计算得到的片元RGB颜色
92 */
93 Eigen::Vector3f (*fragment_shader_ptr)(
94 const FragmentShaderPayload& payload, const PhongMaterial& material,
95 const std::list<Light>& lights, const Camera& camera
96 );
97
98private:
99};
100
101#endif // DANDELION_RENDER_RASTERIZER_RENDERER_H
包含相机的类,用来表示场景中的相机。
负责执行片元着色器的工作线程。
定义 rasterizer_renderer.h:71
Eigen::Vector3f(*) fragment_shader_ptr(const FragmentShaderPayload &payload, const PhongMaterial &material, const std::list< Light > &lights, const Camera &camera)
片元着色器函数指针,指向用于计算片元颜色的着色器函数
定义 rasterizer_renderer.h:93
void worker_thread()
负责执行片元着色器的工作线程
定义 rasterizer_renderer.cpp:213
负责执行顶点着色器的工作线程。
定义 rasterizer_renderer.h:27
void input_vertices(const Eigen::Vector4f &positions, const Eigen::Vector3f &normals)
输入顶点数据到顶点处理队列中
定义 rasterizer_renderer.cpp:166
std::mutex queue_mutex
定义 rasterizer_renderer.h:62
void worker_thread()
负责执行顶点着色器的工作线程
定义 rasterizer_renderer.cpp:177
VertexShaderPayload(*) vertex_shader_ptr(const VertexShaderPayload &payload)
顶点着色器函数指针,指向用于处理顶点数据的着色器函数
定义 rasterizer_renderer.h:46
std::queue< VertexShaderPayload > vertex_queue
定义 rasterizer_renderer.h:60
一些公用的渲染管线接口。
包含光源的类,目前只有一个点光源。
表示观察点的相机,既可以用于预览视角,也可以用于渲染视角。
定义 camera.h:24
片元着色器的输入单位。
定义 graphics_interface.h:45
实现 Phong 材质模型的材质。
定义 material.hpp:51
顶点着色器的输入和输出单位。
定义 graphics_interface.h:27