5 #ifndef _SPICA_LIGHT_INTERFACE_
6 #define _SPICA_LIGHT_INTERFACE_
8 #include "core/core.hpp"
9 #include "core/cobject.h"
10 #include "core/point3d.h"
11 #include "core/normal3d.h"
12 #include "core/spectrum.h"
13 #include "core/vector3d.h"
14 #include "core/transform.h"
15 #include "core/uncopyable.h"
16 #include "core/stack.h"
18 #include "core/render.hpp"
46 LightSample(
const LightSample& l)
51 LightSample& operator=(
const LightSample& l) {
60 inline Point3d position()
const {
return _pos; }
61 inline Normal3d normal()
const {
return _nrm; }
62 inline Vector3d dir()
const {
return _dir; }
63 inline Spectrum Le()
const {
return _emt; }
64 inline double pdf()
const {
return _pdf; }
71 enum class LightType {
82 Light(LightType type,
const Transform& light2World,
int numSamples = 1);
85 LightType type()
const;
109 double *pdfDir)
const = 0;
110 virtual void pdfLe(
const Ray& ray,
const Normal3d& nLight,
111 double* pdfPos,
double* pdfDir)
const = 0;
115 virtual Light* clone()
const = 0;
117 inline virtual bool isDelta()
const {
return false; }
118 inline bool isArea()
const {
return type_ == LightType::Area; }
121 const LightType type_;
122 const int numSamples_;
130 #endif // _SPICA_LIGHT_INTERFACE_
RGB spectrum.
Definition: spectrum.h:18
Ray class.
Definition: ray.h:24
The base class for the lights.
Definition: light.h:80
Definition: visibility_tester.h:15
Interface class which forbids copy and assignment.
Definition: uncopyable.h:15
Definition: interaction.h:23
LightSample()
Sample PDF.
Definition: light.h:31