-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaterial.h
More file actions
64 lines (56 loc) · 1.72 KB
/
Copy pathMaterial.h
File metadata and controls
64 lines (56 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#pragma once
#include "Types/Colour.h"
#include "PointLight.h"
#include "Types/Vector.h"
#include "Patterns/Pattern.h"
#include <memory>
class Material
{
public:
// Constructors
Material(
const Colour& colourVal = Colour(1, 1, 1),
const double ambientVal = 0.1,
const double diffuseVal = 0.9,
const double specularVal = 0.9,
const double shininessVal = 200.0,
const double reflectiveVal = 0.0,
const double transparencyVal = 0.0,
const double refractiveIndexVal = 1.0);
~Material();
// Overloaded operators
bool operator==(const Material& rhs) const;
// Getters
const Colour& getColour() const;
double getAmbient() const;
double getDiffuse() const;
double getSpecular() const;
double getShininess() const;
const std::shared_ptr<Pattern> getPattern() const;
double getReflectivity() const;
double getTransparency() const;
double getRefractiveIndex() const;
// Setters
void setColour(const Colour& colourVal);
void setAmbient(const double ambientVal);
void setDiffuse(const double diffuseVal);
void setSpecular(const double specularVal);
void setShininess(const double shininessVal);
void setPattern(std::shared_ptr<Pattern> patternVal);
void setReflectivity(const double reflectiveVal);
void setTransparency(const double transparencyVal);
void setRefractiveIndex(const double refractiveIndexVal);
// Utilities
Colour lighting(const std::shared_ptr<class Object>& object, const PointLight& light, const Point& point, const Vector& eyeV, const Vector& normalV, const bool inShadow) const;
void makeGlassy();
private:
Colour colour;
double ambient;
double diffuse;
double specular;
double shininess;
std::shared_ptr<Pattern> pattern;
double reflective;
double transparency;
double refractiveIndex;
};