コード例 #1
0
	virtual bool scatter(Ray<float> & r_in, hit_record & rec, Vec3<float> & attenuation, Ray<float> & scattered) const{

		Vec3<float> target = rec.p + rec.normal + random_in_unit_sphere();
		scattered = Ray<float>(rec.p, target - rec.p);
		attenuation = albedo;
		return true;
	}
コード例 #2
0
ファイル: Material.cpp プロジェクト: jonaskivi/rae_ray
bool Metal::scatter(const Ray& r_in, const HitRecord& record, vec3& attenuation, Ray& scattered) const
{
	vec3 reflected = reflect( glm::normalize(r_in.direction()), record.normal );
	scattered = Ray(record.point, reflected + roughness * random_in_unit_sphere());
	attenuation = albedo;
	return (dot(scattered.direction(), record.normal) > 0);
}
コード例 #3
0
ファイル: Material.cpp プロジェクト: jonaskivi/rae_ray
bool Lambertian::scatter(const Ray& r_in, const HitRecord& record, vec3& attenuation, Ray& scattered) const
{
	vec3 target = record.point + record.normal + random_in_unit_sphere();
	scattered = Ray(record.point, target - record.point);
	attenuation = albedo;
	return true;
}
コード例 #4
0
ファイル: materials.c プロジェクト: Raphy42/RT
t_bool           lambertian(t_material *material, const t_ray *r, const t_hit_record *h, t_vec3 *attenuation, t_ray *scattered)
{
    (void)r;
    t_vec3      target;
    t_vec3      random;

    random = random_in_unit_sphere(1.0f);
    vec3_add(&target, vec3_add(&target, &h->normal, &h->pos), &random);
    ray_assign(scattered, &h->pos, vec3_sub(&target, &target, &h->pos));
    material->texture.value(&material->texture, h, attenuation);
    return (TRUE);
}
コード例 #5
0
ファイル: lambertian.cpp プロジェクト: ghostec/canvas
bool Lambertian::scatter(const ray& r_in, const hit_record& rec, vec3& attenuation, ray& scattered) const {
  vec3 target = rec.p + rec.normal + random_in_unit_sphere();
  scattered = ray(rec.p, target - rec.p);
  attenuation = albedo;
  return true;
}