From 3deef4d969dd50ddf540b80fe43ef16af5c17169 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Mon, 24 Jun 2024 22:51:51 +0100 Subject: Chapter 11 --- vec3.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'vec3.go') diff --git a/vec3.go b/vec3.go index a540b7c..f590625 100644 --- a/vec3.go +++ b/vec3.go @@ -95,3 +95,12 @@ func RandomVec3OnUnitSphere() (v Vec3) { func (v Vec3) Reflect(n Vec3) Vec3 { return v.Sub(SplatVec3(2 * v.Dot(n)).Mul(n)); } + +func (v Vec3) Refract(n Vec3, eta_ratio float64) Vec3 { + cos_theta := maths.Min(v.Neg().Dot(n), 1.0); + r_out_perp := SplatVec3(eta_ratio). + Mul(v.Add(SplatVec3(cos_theta).Mul(n))); + rops := -maths.Sqrt(maths.Abs(1.0 - r_out_perp.MagSqr())); + r_out_parr := SplatVec3(rops).Mul(n); + return r_out_perp.Add(r_out_parr); +} -- cgit v1.2.1