istereo
annotate libs/vmath/ray.h @ 28:c0ae8e668447
added vmath library
author | John Tsiombikas <nuclear@mutantstargoat.com> |
---|---|
date | Thu, 08 Sep 2011 08:30:42 +0300 |
parents | |
children | ff055bff6a15 |
rev | line source |
---|---|
nuclear@28 | 1 #ifndef VMATH_RAY_H_ |
nuclear@28 | 2 #define VMATH_RAY_H_ |
nuclear@28 | 3 |
nuclear@28 | 4 #include "matrix.h" |
nuclear@28 | 5 #include "vector.h" |
nuclear@28 | 6 |
nuclear@28 | 7 typedef struct { |
nuclear@28 | 8 vec3_t origin, dir; |
nuclear@28 | 9 } ray_t; |
nuclear@28 | 10 |
nuclear@28 | 11 #ifdef __cplusplus |
nuclear@28 | 12 extern "C" { |
nuclear@28 | 13 #endif /* __cplusplus */ |
nuclear@28 | 14 |
nuclear@28 | 15 static inline ray_t ray_cons(vec3_t origin, vec3_t dir); |
nuclear@28 | 16 ray_t ray_transform(ray_t r, mat4_t m); |
nuclear@28 | 17 |
nuclear@28 | 18 #ifdef __cplusplus |
nuclear@28 | 19 } /* __cplusplus */ |
nuclear@28 | 20 |
nuclear@28 | 21 #include <stack> |
nuclear@28 | 22 |
nuclear@28 | 23 class Ray { |
nuclear@28 | 24 private: |
nuclear@28 | 25 std::stack<scalar_t> ior_stack; |
nuclear@28 | 26 |
nuclear@28 | 27 public: |
nuclear@28 | 28 /* enviornmental index of refraction, normally 1.0 */ |
nuclear@28 | 29 static scalar_t env_ior; |
nuclear@28 | 30 |
nuclear@28 | 31 Vector3 origin, dir; |
nuclear@28 | 32 scalar_t energy; |
nuclear@28 | 33 int iter; |
nuclear@28 | 34 scalar_t ior; |
nuclear@28 | 35 long time; |
nuclear@28 | 36 |
nuclear@28 | 37 Ray(); |
nuclear@28 | 38 Ray(const Vector3 &origin, const Vector3 &dir); |
nuclear@28 | 39 |
nuclear@28 | 40 void transform(const Matrix4x4 &xform); |
nuclear@28 | 41 Ray transformed(const Matrix4x4 &xform) const; |
nuclear@28 | 42 |
nuclear@28 | 43 void enter(scalar_t new_ior); |
nuclear@28 | 44 void leave(); |
nuclear@28 | 45 |
nuclear@28 | 46 scalar_t calc_ior(bool entering, scalar_t mat_ior = 1.0) const; |
nuclear@28 | 47 }; |
nuclear@28 | 48 |
nuclear@28 | 49 inline Ray reflect_ray(const Ray &inray, const Vector3 &norm); |
nuclear@28 | 50 inline Ray refract_ray(const Ray &inray, const Vector3 &norm, scalar_t ior, bool entering, scalar_t ray_mag = -1.0); |
nuclear@28 | 51 #endif /* __cplusplus */ |
nuclear@28 | 52 |
nuclear@28 | 53 #include "ray.inl" |
nuclear@28 | 54 |
nuclear@28 | 55 #endif /* VMATH_RAY_H_ */ |