diff options
Diffstat (limited to 'hw5/src/bilinearTexture.cpp')
-rw-r--r-- | hw5/src/bilinearTexture.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/hw5/src/bilinearTexture.cpp b/hw5/src/bilinearTexture.cpp new file mode 100644 index 0000000..79a8811 --- /dev/null +++ b/hw5/src/bilinearTexture.cpp @@ -0,0 +1,69 @@ +/******************************************************************/ +/* 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 "bilinearTexture.h" + + +////////////////// +// Constructors // +////////////////// +bilinearTexture::bilinearTexture(bool repeat) + : texture_base(repeat) +{ + // Do nothing. +} + + +bilinearTexture::bilinearTexture(const bilinearTexture& src) + : texture_base(src) +{ + // Do nothing +} + + +/////////////// +// Operators // +/////////////// +bilinearTexture& bilinearTexture::operator=(const bilinearTexture& src) +{ + _assign(src); + return *this; +} + + +image::value_type bilinearTexture::operator()(const vec2d& textureCoord) const +{ + // HW5: Implement a bilinear texture evaluation. Given a texture coordinate + // return the bilinearly interpolate the color. + // Modifes: nothing. + // Returns: color. + + vec2d::value_type x, y, x1, x2, y1, y2, dx, dy; + color a, b; + + x = textureCoord.u * (image::width() - 1); + y = textureCoord.v * (image::height() - 1); + x1 = floor(x); + x2 = x1 + 1; + y1 = floor(y); + y2 = y1 + 1; + dx = x - x1; + dy = y - y1; + a = _at(x1, y1) * (1 - dx) + _at(x2, y1) * dx; + b = _at(x1, y2) * (1 - dx) + _at(x2, y2) * dx; + return a * (1 - dy) + b * (dy); +} + + +///////////////////// +// Private Methods // +///////////////////// +void bilinearTexture::_print(std::ostream& s) const +{ + s << "Bilinear texture (" << this->width() << "x" << this->height() << ")"; +} |