Dandelion
2.0.0
A light-weight 3D builder for educational usage
Toggle main menu visibility
载入中...
搜索中...
未找到
material.hpp
浏览该文件的文档.
1
#pragma once
2
3
#include <cstddef>
4
5
#include <Eigen/Core>
6
7
/*!
8
* \file scene/material.hpp
9
* \~chinese
10
* 提供所有材质相关类型的定义。
11
*/
12
13
/*!
14
* \~chinese
15
* \brief 材质类型枚举,每一种类型对应一种材质模型。
16
*/
17
enum class
MaterialType
18
{
19
Phong
20
};
21
22
/*!
23
* \ingroup scene
24
* \ingroup rendering
25
* \~chinese
26
* \brief 所有材质的基类。
27
*/
28
struct
Material
29
{
30
Material();
31
virtual
~Material() =
default
;
32
/*! \~chinese 获取材质类型,所有可用的材质模型参考 `MaterialType` 。 */
33
virtual
MaterialType
type
() const noexcept = 0;
34
35
/*! \~chinese 材质的唯一 ID ,不会与其他材质重复。 */
36
std::
size_t
id
;
37
38
private:
39
40
static std::
size_t
next_available_id;
41
};
42
43
/*!
44
* \~chinese
45
* \brief 实现 Phong 材质模型的材质。
46
*
47
* 该类型实现了一个简单的 Phong 材质模型,包含环境光、漫反射、镜面反射三个颜色向量,
48
* 以及一个光滑度参数。
49
*/
50
struct
PhongMaterial
: public Material
51
{
52
/*!
53
* \~chinese
54
* \brief 构造一个材质对象。
55
* \param K_ambient 环境光系数(颜色)
56
* \param K_diffuse 漫反射系数(颜色)
57
* \param K_specular 镜面反射系数(颜色)
58
* \param shininess 光滑度
59
*/
60
PhongMaterial
(
61
const
Eigen::Vector3f& K_ambient = Eigen::Vector3f(1.0f, 1.0f, 1.0f),
62
const
Eigen::Vector3f& K_diffuse = Eigen::Vector3f(0.5f, 0.5f, 0.5f),
63
const
Eigen::Vector3f& K_specular = Eigen::Vector3f(0.0f, 0.0f, 0.0f),
64
float
shininess
= 5.0f
65
);
66
virtual
~PhongMaterial
() =
default
;
67
/*! \~chinese 返回 `MaterialType::Phong` 。 */
68
virtual
MaterialType
type
()
const
noexcept
;
69
70
/*! \~chinese 环境光反射系数(颜色)。 */
71
Eigen::Vector3f
ambient
;
72
/*! \~chinese 漫反射光反射系数(颜色)。 */
73
Eigen::Vector3f
diffuse
;
74
/*! \~chinese 镜面反射光反射系数(颜色)。 */
75
Eigen::Vector3f
specular
;
76
/*! \~chinese Phong 模型计算镜面反射时的指数 */
77
float
shininess
;
78
};
MaterialType
MaterialType
材质类型枚举,每一种类型对应一种材质模型。
定义
material.hpp:18
Material::type
virtual MaterialType type() const noexcept=0
PhongMaterial::PhongMaterial
PhongMaterial(const Eigen::Vector3f &K_ambient=Eigen::Vector3f(1.0f, 1.0f, 1.0f), const Eigen::Vector3f &K_diffuse=Eigen::Vector3f(0.5f, 0.5f, 0.5f), const Eigen::Vector3f &K_specular=Eigen::Vector3f(0.0f, 0.0f, 0.0f), float shininess=5.0f)
构造一个材质对象。
定义
material.cpp:14
PhongMaterial::specular
Eigen::Vector3f specular
定义
material.hpp:75
PhongMaterial::type
virtual MaterialType type() const noexcept
定义
material.cpp:21
PhongMaterial::ambient
Eigen::Vector3f ambient
定义
material.hpp:71
PhongMaterial::shininess
float shininess
定义
material.hpp:77
PhongMaterial::diffuse
Eigen::Vector3f diffuse
定义
material.hpp:73
src
scene
material.hpp
制作者
1.18.0