istereo2

annotate libs/vmath/ray.h @ 8:661bf09db398

- replaced Quartz timer with cross-platform timer code - protected goatkit builtin theme function from being optimized out
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 24 Sep 2015 07:09:37 +0300
parents
children
rev   line source
nuclear@2 1 /*
nuclear@2 2 libvmath - a vector math library
nuclear@2 3 Copyright (C) 2004-2011 John Tsiombikas <nuclear@member.fsf.org>
nuclear@2 4
nuclear@2 5 This program is free software: you can redistribute it and/or modify
nuclear@2 6 it under the terms of the GNU Lesser General Public License as published
nuclear@2 7 by the Free Software Foundation, either version 3 of the License, or
nuclear@2 8 (at your option) any later version.
nuclear@2 9
nuclear@2 10 This program is distributed in the hope that it will be useful,
nuclear@2 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
nuclear@2 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nuclear@2 13 GNU Lesser General Public License for more details.
nuclear@2 14
nuclear@2 15 You should have received a copy of the GNU Lesser General Public License
nuclear@2 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
nuclear@2 17 */
nuclear@2 18
nuclear@2 19 #ifndef VMATH_RAY_H_
nuclear@2 20 #define VMATH_RAY_H_
nuclear@2 21
nuclear@2 22 #include "matrix.h"
nuclear@2 23 #include "vector.h"
nuclear@2 24
nuclear@2 25 typedef struct {
nuclear@2 26 vec3_t origin, dir;
nuclear@2 27 } ray_t;
nuclear@2 28
nuclear@2 29 #ifdef __cplusplus
nuclear@2 30 extern "C" {
nuclear@2 31 #endif /* __cplusplus */
nuclear@2 32
nuclear@2 33 static inline ray_t ray_cons(vec3_t origin, vec3_t dir);
nuclear@2 34 ray_t ray_transform(ray_t r, mat4_t m);
nuclear@2 35
nuclear@2 36 #ifdef __cplusplus
nuclear@2 37 } /* __cplusplus */
nuclear@2 38
nuclear@2 39 #include <stack>
nuclear@2 40
nuclear@2 41 class Ray {
nuclear@2 42 private:
nuclear@2 43 std::stack<scalar_t> ior_stack;
nuclear@2 44
nuclear@2 45 public:
nuclear@2 46 /* enviornmental index of refraction, normally 1.0 */
nuclear@2 47 static scalar_t env_ior;
nuclear@2 48
nuclear@2 49 Vector3 origin, dir;
nuclear@2 50 scalar_t energy;
nuclear@2 51 int iter;
nuclear@2 52 scalar_t ior;
nuclear@2 53 long time;
nuclear@2 54
nuclear@2 55 Ray();
nuclear@2 56 Ray(const Vector3 &origin, const Vector3 &dir);
nuclear@2 57
nuclear@2 58 void transform(const Matrix4x4 &xform);
nuclear@2 59 Ray transformed(const Matrix4x4 &xform) const;
nuclear@2 60
nuclear@2 61 void enter(scalar_t new_ior);
nuclear@2 62 void leave();
nuclear@2 63
nuclear@2 64 scalar_t calc_ior(bool entering, scalar_t mat_ior = 1.0) const;
nuclear@2 65 };
nuclear@2 66
nuclear@2 67 inline Ray reflect_ray(const Ray &inray, const Vector3 &norm);
nuclear@2 68 inline Ray refract_ray(const Ray &inray, const Vector3 &norm, scalar_t ior, bool entering, scalar_t ray_mag = -1.0);
nuclear@2 69 #endif /* __cplusplus */
nuclear@2 70
nuclear@2 71 #include "ray.inl"
nuclear@2 72
nuclear@2 73 #endif /* VMATH_RAY_H_ */