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 }