aboutsummaryrefslogtreecommitdiff
path: root/vec3.go
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2024-06-24 22:51:51 +0100
committerNat Lasseter <user@4574.co.uk>2024-06-24 22:51:51 +0100
commit3deef4d969dd50ddf540b80fe43ef16af5c17169 (patch)
tree456754a9bffb31471f2e64698afb8ee95aebca93 /vec3.go
parentd248e30d365d5e401d5cd372aa415fb2f9a39326 (diff)
Chapter 11
Diffstat (limited to 'vec3.go')
-rw-r--r--vec3.go9
1 files changed, 9 insertions, 0 deletions
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);
+}