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 {