Add fuzziness to metal materials.
This commit is contained in:
parent
bdb68df296
commit
129854222d
@ -11,7 +11,7 @@ bool Lambertian::scatter(const Ray& r_in, const hit_record& rec, Color& attenuat
|
|||||||
|
|
||||||
bool Metal::scatter(const Ray& r_in, const hit_record& rec, Color& attenuation, Ray& scattered) const {
|
bool Metal::scatter(const Ray& r_in, const hit_record& rec, Color& attenuation, Ray& scattered) const {
|
||||||
Vec3 reflected = reflect(unit_vector(r_in.direction()), rec.normal);
|
Vec3 reflected = reflect(unit_vector(r_in.direction()), rec.normal);
|
||||||
scattered = Ray(rec.p, reflected);
|
scattered = Ray(rec.p, reflected + fuzz * random_in_unit_sphere());
|
||||||
attenuation = albedo;
|
attenuation = albedo;
|
||||||
return (dot(scattered.direction(), rec.normal) > 0);
|
return (dot(scattered.direction(), rec.normal) > 0);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,12 @@ private:
|
|||||||
|
|
||||||
class Metal : public Material {
|
class Metal : public Material {
|
||||||
public:
|
public:
|
||||||
Metal(const Color& a) : albedo(a) {}
|
Metal(const Color& a, double f) : albedo(a), fuzz(f < 1 ? f : 1) {}
|
||||||
|
|
||||||
virtual bool scatter(const Ray& r_in, const hit_record& rec, Color& attenuation, Ray& scattered) const;
|
virtual bool scatter(const Ray& r_in, const hit_record& rec, Color& attenuation, Ray& scattered) const;
|
||||||
private:
|
private:
|
||||||
Color albedo;
|
Color albedo;
|
||||||
|
double fuzz;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MATERIAL_H
|
#endif // MATERIAL_H
|
||||||
|
@ -45,10 +45,10 @@ int main() {
|
|||||||
world.add(std::make_shared<Sphere>(Point3(0, -100.5, -1), 100));*/
|
world.add(std::make_shared<Sphere>(Point3(0, -100.5, -1), 100));*/
|
||||||
|
|
||||||
world.add(std::make_shared<Sphere>(Point3(0, 0, -1), 0.5, std::make_shared<Lambertian>(Color(0.7, 0.3, 0.3))));
|
world.add(std::make_shared<Sphere>(Point3(0, 0, -1), 0.5, std::make_shared<Lambertian>(Color(0.7, 0.3, 0.3))));
|
||||||
world.add(std::make_shared<Sphere>(Point3(0, -100.5, -1), 100, std::make_shared<Lambertian>(Color(0.8, 0.8, 0.8))));
|
world.add(std::make_shared<Sphere>(Point3(0, -100.5, -1), 100, std::make_shared<Lambertian>(Color(0.8, 0.8, 0.0))));
|
||||||
|
|
||||||
world.add(std::make_shared<Sphere>(Point3(1, 0, -1), 0.5, std::make_shared<Metal>(Color(0.8, 0.6, 0.2))));
|
world.add(std::make_shared<Sphere>(Point3(1, 0, -1), 0.5, std::make_shared<Metal>(Color(0.8, 0.6, 0.2), 0.3)));
|
||||||
world.add(std::make_shared<Sphere>(Point3(-1, 0, -1), 0.5, std::make_shared<Metal>(Color(0.8, 0.8, 0.8))));
|
world.add(std::make_shared<Sphere>(Point3(-1, 0, -1), 0.5, std::make_shared<Metal>(Color(0.8, 0.8, 0.8), 1.0)));
|
||||||
|
|
||||||
Camera cam;
|
Camera cam;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user