Dandelion 2.0.0
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
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 */
17enum class MaterialType
18{
19 Phong
20};
21
22/*!
23 * \ingroup scene
24 * \ingroup rendering
25 * \~chinese
26 * \brief 所有材质的基类。
27 */
28struct 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
38private:
39
40 static std::size_t next_available_id;
41};
42
43/*!
44 * \~chinese
45 * \brief 实现 Phong 材质模型的材质。
46 *
47 * 该类型实现了一个简单的 Phong 材质模型,包含环境光、漫反射、镜面反射三个颜色向量,
48 * 以及一个光滑度参数。
49 */
50struct 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 */
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
材质类型枚举,每一种类型对应一种材质模型。
定义 material.hpp:18
virtual MaterialType type() const noexcept=0
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
Eigen::Vector3f specular
定义 material.hpp:75
virtual MaterialType type() const noexcept
定义 material.cpp:21
Eigen::Vector3f ambient
定义 material.hpp:71
float shininess
定义 material.hpp:77
Eigen::Vector3f diffuse
定义 material.hpp:73