summaryrefslogtreecommitdiff
path: root/hw3/src/diffuseBrdf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hw3/src/diffuseBrdf.cpp')
-rw-r--r--hw3/src/diffuseBrdf.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/hw3/src/diffuseBrdf.cpp b/hw3/src/diffuseBrdf.cpp
new file mode 100644
index 0000000..849e341
--- /dev/null
+++ b/hw3/src/diffuseBrdf.cpp
@@ -0,0 +1,88 @@
+/******************************************************************/
+/* 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 <cmath>
+#include "constants.h"
+#include "diffuseBrdf.h"
+
+//////////////////
+// Constructors //
+//////////////////
+diffuseBrdf::diffuseBrdf(const color& albedo)
+{
+ _albedo = albedo;
+}
+
+
+diffuseBrdf::diffuseBrdf(const diffuseBrdf& src)
+{
+ _albedo = src._albedo;
+}
+
+
+///////////////
+// Operators //
+///////////////
+diffuseBrdf& diffuseBrdf::operator=(const diffuseBrdf& src)
+{
+ _assign(src);
+ return *this;
+}
+
+
+/////////////
+// Methods //
+/////////////
+color diffuseBrdf::shade(const vec3d& in, const vec3d& out) const
+{
+ // HW3: Implement this.
+ // Returns the shaded color from a diffuse surface for an
+ // incident lighting direction of 'in'. The surface normal = (0,0,1).
+ // Returns: shaded color
+ // Modifies: nothing.
+ if (out.z < EPSILON) { return color(0.0f); }
+
+ vec3d normal;
+ float normal_dot_in;
+
+ normal = vec3d(0, 0, 1);
+ normal_dot_in = normal.dot(in);
+ return color(_albedo * normal_dot_in);
+}
+
+
+bool diffuseBrdf::isSpecular(void) const
+{
+ return false;
+}
+
+
+bool diffuseBrdf::isDiffuse(void) const
+{
+ return true;
+}
+
+
+/////////////////////
+// Private Methods //
+/////////////////////
+void diffuseBrdf::_assign(const diffuseBrdf& src)
+{
+ _albedo = src._albedo;
+}
+
+
+void diffuseBrdf::_swap(diffuseBrdf& src)
+{
+ swap(_albedo, src._albedo);
+}
+
+void diffuseBrdf::_print(std::ostream& s) const
+{
+ s << "Diffuse BRDF: albedo=" << _albedo;
+}