diff options
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); +} |