rayzor

diff src/vmath.h @ 19:252999cd1a3f

added reflection and refraction
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 15 Apr 2014 00:59:37 +0300
parents 79609d482762
children
line diff
     1.1 --- a/src/vmath.h	Mon Apr 14 18:35:37 2014 +0300
     1.2 +++ b/src/vmath.h	Tue Apr 15 00:59:37 2014 +0300
     1.3 @@ -97,6 +97,25 @@
     1.4  			a.z + (b.z - a.z) * t);
     1.5  }
     1.6  
     1.7 +inline Vector3 reflect(const Vector3 &v, const Vector3 &n)
     1.8 +{
     1.9 +	float vdotn = dot(v, n);
    1.10 +	return n * vdotn * 2.0 - v;
    1.11 +}
    1.12 +
    1.13 +inline Vector3 refract(const Vector3 &v, const Vector3 &n, float ior)
    1.14 +{
    1.15 +	float cos_inc = dot(v, -n);
    1.16 +	float radical = 1.0 + ior * ior * (cos_inc * cos_inc - 1.0);
    1.17 +
    1.18 +	if(radical < 0.0) {	// total internal reflection
    1.19 +		return -reflect(v, n);
    1.20 +	}
    1.21 +
    1.22 +	float beta = ior * cos_inc - sqrt(radical);
    1.23 +	return v * ior + n * beta;
    1.24 +}
    1.25 +
    1.26  // ---- Vector4 ----
    1.27  
    1.28  class Vector4 {