aboutsummaryrefslogtreecommitdiff
path: root/src/raytracer
diff options
context:
space:
mode:
Diffstat (limited to 'src/raytracer')
-rw-r--r--src/raytracer/raytracer.cpp9
-rw-r--r--src/raytracer/raytracer.h30
2 files changed, 18 insertions, 21 deletions
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index acb229a..b393d40 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -127,12 +127,9 @@ glm::vec4 RayTracer::getPixelFromRay(
}
}
- glm::vec3 normalObject = getNormal(closestIntersectionObj, intersectedShape, scene);
- glm::vec3 normalWorld =
- (
- glm::inverse(glm::transpose(intersectedShape.ctm))
- * glm::vec4(normalObject, 0.f)
- ).xyz();
+ glm::vec4 normalObject = glm::normalize(getNormal(closestIntersectionObj, intersectedShape, scene));
+ // update
+ glm::vec4 normalWorld = glm::inverse(glm::transpose(intersectedShape.ctm)) * glm::vec4(normalObject);
return illuminatePixel(closestIntersectionWorld, normalWorld, -dWorld, intersectedShape, scene, depth);
}
diff --git a/src/raytracer/raytracer.h b/src/raytracer/raytracer.h
index 9bbeb5c..f8b3721 100644
--- a/src/raytracer/raytracer.h
+++ b/src/raytracer/raytracer.h
@@ -59,7 +59,7 @@ public:
const RenderShapeData &shape,
glm::vec4 illuminationToInterpolate);
- glm::vec3 getNormal(
+ glm::vec4 getNormal(
glm::vec4 intersectPointObject,
const RenderShapeData &shape,
const RayTraceScene &scene);
@@ -97,9 +97,9 @@ public:
const RayTraceScene &scene,
int depth);
glm::vec4 illuminatePixel(
- glm::vec3 intersectionWorld,
- glm::vec3 normalWorld,
- glm::vec3 directionToCamera,
+ glm::vec4 intersectionWorld,
+ glm::vec4 normalWorld,
+ glm::vec4 directionToCamera,
const RenderShapeData &shape,
const RayTraceScene &scene,
int depth);
@@ -107,26 +107,26 @@ public:
// shading, and helpers for each type of light
glm::vec4
- phong(glm::vec4 lightColor, float attenuation, glm::vec3 directionFromIntersectionToLight,
- glm::vec3 directionToCamera,
- glm::vec3 intersectionWorld, glm::vec3 normalWorld, const RenderShapeData &shape, const RayTraceScene &scene);
+ phong(glm::vec4 lightColor, float attenuation, glm::vec4 directionFromIntersectionToLight,
+ glm::vec4 directionToCamera,
+ glm::vec4 intersectionWorld, glm::vec4 normalWorld, const RenderShapeData &shape, const RayTraceScene &scene);
glm::vec4
- illuminationFromPointLight(const SceneLightData &light, glm::vec3 intersectionWorld, glm::vec3 normalWorld,
- glm::vec3 directionToCamera, const RenderShapeData &shape,
+ illuminationFromPointLight(const SceneLightData &light, glm::vec4 intersectionWorld, glm::vec4 normalWorld,
+ glm::vec4 directionToCamera, const RenderShapeData &shape,
const RayTraceScene &scene);
- glm::vec4 illuminationFromSpotLight(const SceneLightData &light, glm::vec3 intersectionWorld, glm::vec3 normalWorld,
- glm::vec3 directionToCamera, const RenderShapeData &shape,
+ glm::vec4 illuminationFromSpotLight(const SceneLightData &light, glm::vec4 intersectionWorld, glm::vec4 normalWorld,
+ glm::vec4 directionToCamera, const RenderShapeData &shape,
const RayTraceScene &scene);
glm::vec4
- illuminationFromDirectionalLight(const SceneLightData &light, glm::vec3 intersectionWorld, glm::vec3 normalWorld,
- glm::vec3 directionToCamera, const RenderShapeData &shape,
+ illuminationFromDirectionalLight(const SceneLightData &light, glm::vec4 intersectionWorld, glm::vec4 normalWorld,
+ glm::vec4 directionToCamera, const RenderShapeData &shape,
const RayTraceScene &scene);
- glm::vec4 illuminationFromAreaLight(const SceneLightData &light, glm::vec3 intersectionWorld, glm::vec3 normalWorld,
- glm::vec3 directionToCamera, const RenderShapeData &shape,
+ glm::vec4 illuminationFromAreaLight(const SceneLightData &light, glm::vec4 intersectionWorld, glm::vec4 normalWorld,
+ glm::vec4 directionToCamera, const RenderShapeData &shape,
const RayTraceScene &scene);