dbf-halloween2015
annotate libs/vmath/ray.cc @ 1:c3f5c32cb210
barfed all the libraries in the source tree to make porting easier
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 01 Nov 2015 00:36:56 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@1 | 1 #include "ray.h" |
nuclear@1 | 2 #include "vector.h" |
nuclear@1 | 3 |
nuclear@1 | 4 scalar_t Ray::env_ior = 1.0; |
nuclear@1 | 5 |
nuclear@1 | 6 Ray::Ray() |
nuclear@1 | 7 { |
nuclear@1 | 8 ior = env_ior; |
nuclear@1 | 9 energy = 1.0; |
nuclear@1 | 10 time = 0; |
nuclear@1 | 11 iter = 0; |
nuclear@1 | 12 } |
nuclear@1 | 13 |
nuclear@1 | 14 Ray::Ray(const Vector3 &origin, const Vector3 &dir) |
nuclear@1 | 15 { |
nuclear@1 | 16 this->origin = origin; |
nuclear@1 | 17 this->dir = dir; |
nuclear@1 | 18 ior = env_ior; |
nuclear@1 | 19 energy = 1.0; |
nuclear@1 | 20 time = 0; |
nuclear@1 | 21 iter = 0; |
nuclear@1 | 22 } |
nuclear@1 | 23 |
nuclear@1 | 24 #undef CORRECT_RAY_XFORM |
nuclear@1 | 25 |
nuclear@1 | 26 void Ray::transform(const Matrix4x4 &xform) |
nuclear@1 | 27 { |
nuclear@1 | 28 #ifndef CORRECT_RAY_XFORM |
nuclear@1 | 29 Matrix4x4 upper = xform; |
nuclear@1 | 30 upper[0][3] = upper[1][3] = upper[2][3] = upper[3][0] = upper[3][1] = upper[3][2] = 0.0; |
nuclear@1 | 31 upper[3][3] = 1.0; |
nuclear@1 | 32 |
nuclear@1 | 33 dir.transform(upper); |
nuclear@1 | 34 origin.transform(xform); |
nuclear@1 | 35 #else |
nuclear@1 | 36 Vector3 end = (origin + dir).transformed(xform); |
nuclear@1 | 37 origin.transform(xform); |
nuclear@1 | 38 dir = end - origin; |
nuclear@1 | 39 #endif |
nuclear@1 | 40 } |
nuclear@1 | 41 |
nuclear@1 | 42 Ray Ray::transformed(const Matrix4x4 &xform) const |
nuclear@1 | 43 { |
nuclear@1 | 44 Ray foo = *this; |
nuclear@1 | 45 foo.transform(xform); |
nuclear@1 | 46 return foo; |
nuclear@1 | 47 } |
nuclear@1 | 48 |
nuclear@1 | 49 void Ray::enter(scalar_t new_ior) |
nuclear@1 | 50 { |
nuclear@1 | 51 ior = new_ior; |
nuclear@1 | 52 } |
nuclear@1 | 53 |
nuclear@1 | 54 void Ray::leave() |
nuclear@1 | 55 { |
nuclear@1 | 56 } |
nuclear@1 | 57 |
nuclear@1 | 58 scalar_t Ray::calc_ior(bool entering, scalar_t mat_ior) const |
nuclear@1 | 59 { |
nuclear@1 | 60 scalar_t from_ior = this->ior; |
nuclear@1 | 61 |
nuclear@1 | 62 if(entering) { |
nuclear@1 | 63 return from_ior / mat_ior; |
nuclear@1 | 64 } |
nuclear@1 | 65 |
nuclear@1 | 66 Ray tmp = *this; |
nuclear@1 | 67 tmp.leave(); |
nuclear@1 | 68 return from_ior / tmp.ior; |
nuclear@1 | 69 } |