/******************************************************************/ /* 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 #include "normalMap.h" #include "coordinateTransform.h" ////////////////// // Constructors // ////////////////// normalMap::normalMap(const std::shared_ptr& map, const std::shared_ptr& shader) : shadingFrameTransformation(shader) { _map = map; } ///////////// // Methods // ///////////// transformation3d normalMap::_transformation(const vec2d& textureCoord) const { // HW5: Implement a normal map. This method returns a transformation that // transforms the shading frame into the shading frame defined by the // normals in the _map. The normals are specified in the local shading // frame where N=(0,0,1). The resulting coordinate transformation should // align the Z axis with the new normal, and map the X axis to remain in // the plane defined by the normal and the X axis. // Modifies: nothing // Returns: transformation3d color normalColor = (*_map)(textureCoord); vec3d normal = vec3d(normalColor.r, normalColor.g, normalColor.b); // maintain x-axis in plane transformation3d normalTransform = coordinateTransformation(normal, vec3d(1, 0, 0)); return normalTransform; } void normalMap::_print(std::ostream& s) const { s << "normalMap (" << *_map << ") -> {" << *_shader << "}"; }