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