summaryrefslogtreecommitdiff
path: root/hw6/src/raycasting.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hw6/src/raycasting.cpp')
-rw-r--r--hw6/src/raycasting.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/hw6/src/raycasting.cpp b/hw6/src/raycasting.cpp
new file mode 100644
index 0000000..e533d5a
--- /dev/null
+++ b/hw6/src/raycasting.cpp
@@ -0,0 +1,47 @@
+/******************************************************************/
+/* This file is part of the homework assignments for CSCI-427/527 */
+/* at The College of William & Mary and authored by Pieter Peers. */
+/* No part of this file, whether altered or in original form, can */
+/* be distributed or used outside the context of CSCI-427/527 */
+/* without consent of either the College of William & Mary or */
+/* Pieter Peers. */
+/******************************************************************/
+#include "raycasting.h"
+
+/////////////
+// Methods //
+/////////////
+image raycasting::render(const scene& s) const
+{
+ image result(s.getCamera().width(), s.getCamera().height());
+
+ // for every pixel
+ for(image::size_type y=0; y < result.height(); y++)
+ for(image::size_type x=0; x < result.width(); x++)
+ {
+ // generate view ray
+ ray r = s.getCamera()(x,y);
+
+ // intersect scene
+ intersectionPoint ip = s.intersect(r);
+
+ // shade pixel
+ if(ip.isHit())
+ {
+ // for each light source
+ for(unsigned int l=0; l < s.numberOfLightsources(); l++)
+ {
+ // connect to light source
+ lightSample ls = s.getLightsource(l).intensityAt(ip.position());
+
+ // shade
+ result(x,y) += ip.shade(ls);
+ }
+ }
+ else result(x,y) = color(0.0f, 0.0f, 0.0f);
+ }
+
+
+ // Done.
+ return result;
+}