ray.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:1k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // ray.h
  2. //
  3. // Copyright (C) 2002, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELMATH_RAY_H_
  10. #define _CELMATH_RAY_H_
  11. #include "vecmath.h"
  12. template<class T> class Ray3
  13. {
  14.  public:
  15.     Ray3();
  16.     Ray3(const Point3<T>&, const Vector3<T>&);
  17.  
  18.     Point3<T> point(T) const;
  19.    
  20.  public:
  21.     Point3<T> origin;
  22.     Vector3<T> direction;
  23. };
  24. typedef Ray3<float>   Ray3f;
  25. typedef Ray3<double>  Ray3d;
  26. template<class T> Ray3<T>::Ray3() :
  27.     origin(0, 0, 0), direction(0, 0, -1)
  28. {
  29. }
  30. template<class T> Ray3<T>::Ray3(const Point3<T>& _origin,
  31.                                 const Vector3<T>& _direction) :
  32.     origin(_origin), direction(_direction)
  33. {
  34. }
  35. template<class T> Point3<T> Ray3<T>::point(T t) const
  36. {
  37.     return origin + direction * t;
  38. }
  39. template<class T> Ray3<T> operator*(const Ray3<T>& r, const Matrix3<T>& m)
  40. {
  41.     return Ray3<T>(r.origin * m, r.direction * m);
  42. }
  43. template<class T> Ray3<T> operator*(const Ray3<T>& r, const Matrix4<T>& m)
  44. {
  45.     return Ray3<T>(r.origin * m, r.direction * m);
  46. }
  47. #endif // _CELMATH_RAY_H_