2022-11-05 22:08:16 +01:00
|
|
|
#ifndef SHADER_H
|
|
|
|
#define SHADER_H
|
|
|
|
|
|
|
|
#include "common/color.h"
|
|
|
|
#include "common/ray.h"
|
|
|
|
|
|
|
|
// Forward declarations
|
|
|
|
class Scene;
|
|
|
|
|
2023-01-24 21:11:30 +01:00
|
|
|
class Shader
|
|
|
|
{
|
2022-11-05 22:08:16 +01:00
|
|
|
public:
|
2023-01-24 21:11:30 +01:00
|
|
|
// Constructor / Desctructor
|
|
|
|
Shader() = default;
|
2022-11-05 22:08:16 +01:00
|
|
|
|
2023-01-24 21:11:30 +01:00
|
|
|
virtual ~Shader() = default;
|
2022-11-05 22:08:16 +01:00
|
|
|
|
2023-01-24 21:11:30 +01:00
|
|
|
// Get
|
|
|
|
virtual bool isTransparent() const
|
|
|
|
{ return false; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Especially used for lighting calculations.
|
|
|
|
* @brief Returns the light let through the shader in opposite direction of the given ray.
|
|
|
|
* @param ray Origin and direction of the desired path.
|
|
|
|
* @return 0 if the shader is opaque, 1 if the shader is transparent, for each color channel.
|
|
|
|
*/
|
|
|
|
virtual Color transparency(Scene const &scene, Ray const &ray) const
|
|
|
|
{ return isTransparent() ? Color(1, 1, 1) : Color(0, 0, 0); }
|
|
|
|
|
|
|
|
// Shader functions
|
|
|
|
virtual Color shade(Scene const &scene, Ray const &ray) const = 0;
|
2022-11-05 22:08:16 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|