Dandelion
2.0.0
A light-weight 3D builder for educational usage
Toggle main menu visibility
载入中...
搜索中...
未找到
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
*/
26
class
VertexProcessor
27
{
28
public
:
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
*/
46
VertexShaderPayload
(*
vertex_shader_ptr
)(
const
VertexShaderPayload
& payload);
47
48
/*!
49
* \~chinese
50
* \brief 负责执行顶点着色器的工作线程
51
*
52
* 不断读取顶点队列中的顶点数据,执行顶点着色器,并将结果存储到顶点着色输出队列中
53
*
54
*/
55
void
worker_thread
();
56
57
private
:
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
*/
70
class
FragmentProcessor
71
{
72
public
:
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
98
private
:
99
};
100
101
#endif
// DANDELION_RENDER_RASTERIZER_RENDERER_H
camera.h
包含相机的类,用来表示场景中的相机。
FragmentProcessor
负责执行片元着色器的工作线程。
定义
rasterizer_renderer.h:71
FragmentProcessor::fragment_shader_ptr
Eigen::Vector3f(*) fragment_shader_ptr(const FragmentShaderPayload &payload, const PhongMaterial &material, const std::list< Light > &lights, const Camera &camera)
片元着色器函数指针,指向用于计算片元颜色的着色器函数
定义
rasterizer_renderer.h:93
FragmentProcessor::worker_thread
void worker_thread()
负责执行片元着色器的工作线程
定义
rasterizer_renderer.cpp:213
VertexProcessor
负责执行顶点着色器的工作线程。
定义
rasterizer_renderer.h:27
VertexProcessor::input_vertices
void input_vertices(const Eigen::Vector4f &positions, const Eigen::Vector3f &normals)
输入顶点数据到顶点处理队列中
定义
rasterizer_renderer.cpp:166
VertexProcessor::queue_mutex
std::mutex queue_mutex
定义
rasterizer_renderer.h:62
VertexProcessor::worker_thread
void worker_thread()
负责执行顶点着色器的工作线程
定义
rasterizer_renderer.cpp:177
VertexProcessor::vertex_shader_ptr
VertexShaderPayload(*) vertex_shader_ptr(const VertexShaderPayload &payload)
顶点着色器函数指针,指向用于处理顶点数据的着色器函数
定义
rasterizer_renderer.h:46
VertexProcessor::vertex_queue
std::queue< VertexShaderPayload > vertex_queue
定义
rasterizer_renderer.h:60
graphics_interface.h
一些公用的渲染管线接口。
light.h
包含光源的类,目前只有一个点光源。
Camera
表示观察点的相机,既可以用于预览视角,也可以用于渲染视角。
定义
camera.h:24
FragmentShaderPayload
片元着色器的输入单位。
定义
graphics_interface.h:45
PhongMaterial
实现 Phong 材质模型的材质。
定义
material.hpp:51
VertexShaderPayload
顶点着色器的输入和输出单位。
定义
graphics_interface.h:27
src
render
rasterizer_renderer.h
制作者
1.18.0