diff options
author | Nat Lasseter <user@4574.co.uk> | 2024-06-24 22:51:51 +0100 |
---|---|---|
committer | Nat Lasseter <user@4574.co.uk> | 2024-06-24 22:51:51 +0100 |
commit | 3deef4d969dd50ddf540b80fe43ef16af5c17169 (patch) | |
tree | 456754a9bffb31471f2e64698afb8ee95aebca93 /vec3.go | |
parent | d248e30d365d5e401d5cd372aa415fb2f9a39326 (diff) |
Chapter 11
Diffstat (limited to 'vec3.go')
-rw-r--r-- | vec3.go | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -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); +} |