Skip to content
Snippets Groups Projects
Commit 41a30a3b authored by Yoel's avatar Yoel
Browse files

Implemented light functions

parent 4bae0e20
No related branches found
No related tags found
No related merge requests found
#define _USE_MATH_DEFINES
#include "CirclePlane.h"
#include "../tools/Random.h"
#include "math.h"
namespace shapes {
CirclePlane::CirclePlane(float radius,
const std::shared_ptr<material::Material>& material)
......@@ -31,4 +36,20 @@ util::AxisAlignedBoundingBox CirclePlane::bounds() const {
return util::AxisAlignedBoundingBox(util::Vec3(-radius, 0, -radius),
util::Vec3(radius, 0, radius));
}
// THIS IS COPIED AND BAD TODO!!!!
util::SurfacePoint CirclePlane::sampleLight() const {
float u[2] = {(float)util::dis0to1(util::gen),
(float)util::dis0to1(util::gen)};
float r = std::sqrt(u[0]) * radius;
float theta = 2 * M_PI * u[1];
return util::SurfacePoint(
util::Vec3(r * std::cos(theta), 0, r * std::sin(theta)),
util::Vec3(0, -1, 0), material);
}
util::Vec3 CirclePlane::calculateLightEmission(const util::SurfacePoint& p,
const util::Vec3& d) const {
// Diffus ist hier im dot-product eingebettet
return p.albedo() * (p.emission() * util::dot(p.normal(), d.normalize())) /
std::pow(d.length(), 2);
}
} // namespace shapes
#pragma once
#include "Light.h"
#include "Shape.h"
namespace shapes {
class CirclePlane : public Shape {
class CirclePlane : public Light, public Shape {
public:
CirclePlane(float radius,
const std::shared_ptr<material::Material>& material);
std::optional<cam::Hit> intersect(const cam::Ray& r) const override;
util::AxisAlignedBoundingBox bounds() const override;
util::SurfacePoint sampleLight() const override;
util::Vec3 calculateLightEmission(const util::SurfacePoint& p,
const util::Vec3& d) const override;
private:
std::shared_ptr<material::Material> material;
const float radius;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment