calc light in another way

This commit is contained in:
Shuo Feng 2024-03-14 17:00:55 -04:00
parent dbc959ef80
commit c9919e5b03
Signed by: sfeng
GPG key ID: 1E83AE6CD1C037B1

View file

@ -6,6 +6,7 @@
#include "Ray.h" #include "Ray.h"
#include <Eigen/Core> #include <Eigen/Core>
#include <Eigen/src/Core/Matrix.h>
#include <cmath> #include <cmath>
#include <queue> #include <queue>
@ -31,15 +32,15 @@ void RayTracer::calculateColor(const HitRecord &hit, Output *buffer, int i) {
buffer->r(i, 0); buffer->r(i, 0);
buffer->g(i, 0); buffer->g(i, 0);
buffer->b(i, 0); buffer->b(i, 0);
Vector3f result(0, 0, 0);
for (auto light : lights) for (auto light : lights)
if (light->isUse()) { if (light->isUse())
Vector3f contribution = result += light->illumination(hit, geometries);
light->illumination(hit, geometries).cwiseMax(0.0f).cwiseMin(1.0f) /
lights.size(); result = result.cwiseMax(0.0f).cwiseMin(1.0f);
buffer->r(i, buffer->r(i) + contribution.x()); buffer->r(i, buffer->r(i) + result.x());
buffer->g(i, buffer->g(i) + contribution.y()); buffer->g(i, buffer->g(i) + result.y());
buffer->b(i, buffer->b(i) + contribution.z()); buffer->b(i, buffer->b(i) + result.z());
}
} }
void RayTracer::render(Scene *scene) { void RayTracer::render(Scene *scene) {