summaryrefslogblamecommitdiff
path: root/hw3/src/diffuseBrdf.cpp
blob: 849e341bb2b50fe4544d731789dbf0ee8e583615 (plain) (tree)























































































                                                                            
/******************************************************************/
/* 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;
}