Starting working on area lights.
This commit is contained in:
@@ -14,9 +14,13 @@
|
||||
#include <renderstat.h>
|
||||
#include <stdio.h>
|
||||
|
||||
class World;
|
||||
|
||||
enum LightType
|
||||
{
|
||||
POINT_LIGHT = 0,
|
||||
AREA_LIGHT,
|
||||
|
||||
};
|
||||
|
||||
class Light
|
||||
@@ -26,15 +30,34 @@ public:
|
||||
Tuple position;
|
||||
LightType type;
|
||||
|
||||
/* For area light */
|
||||
Tuple corner;
|
||||
Tuple uVec;
|
||||
Tuple vVec;
|
||||
uint32_t samples;
|
||||
uint32_t uSteps;
|
||||
uint32_t vSteps;
|
||||
|
||||
public:
|
||||
Light(LightType type = POINT_LIGHT, Tuple position=Point(0, 0, 0),
|
||||
Colour intensity=Colour(1, 1, 1)) : type(type), position(position), intensity(intensity)
|
||||
{ stats.addLight(); };
|
||||
Light(LightType type, Tuple corner, Tuple fullUVec, uint32_t uSteps, Tuple fullVVec, uint32_t vSteps,
|
||||
Colour intensity, bool jitter = false): type(type), corner(corner), uVec(fullUVec / uSteps), uSteps(uSteps),
|
||||
vVec(fullVVec / vSteps), vSteps(vSteps), intensity(intensity)
|
||||
{
|
||||
this->samples = this->vSteps * this->uSteps;
|
||||
this->position = this->corner + ((fullUVec + fullVVec) / 2);
|
||||
stats.addLight();
|
||||
};
|
||||
double intensityAt(World &w, Tuple point);
|
||||
|
||||
bool operator==(const Light &b) const { return this->intensity == b.intensity &&
|
||||
this->position == b.position &&
|
||||
this->type == b.type; };
|
||||
|
||||
Tuple pointOnLight(uint32_t u, uint32_t v);
|
||||
|
||||
void dumpMe(FILE *fp);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user