You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

16 lines
769 B

4 years ago
4 years ago
4 years ago
  1. #include "Material.h"
  2. #include "Ray.h"
  3. #include "Texture.h"
  4. #include <math.h>
  5. bool LamberMaterial::Scatter(const Ray & input_ray, const HitPoint & hit_point, Ray & out_ray)
  6. {
  7. Vector3 random_vector = UnitRandomVector3InSphere();
  8. Vector3 new_direction = hit_point.mNormal + random_vector;
  9. out_ray.Set(hit_point.mPosition, new_direction, input_ray.mLightAttenuation*mDiffuseTexture->Sample(hit_point.mU, hit_point.mV));
  10. return true;
  11. }
  12. bool MetalMaterial::Scatter(const Ray & input_ray, const HitPoint & hit_point, Ray & out_ray)
  13. {
  14. Vector3 new_direction = Reflect(input_ray.mDirection, hit_point.mNormal);
  15. out_ray.Set(hit_point.mPosition, new_direction, input_ray.mLightAttenuation*mDiffuseTexture->Sample(hit_point.mU, hit_point.mV));
  16. return true;
  17. }