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

OpenGL

开发平台:

Visual C++

  1. // frustum.h
  2. // 
  3. // Copyright (C) 2000-2008, 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_FRUSTUM_H_
  10. #define _CELMATH_FRUSTUM_H_
  11. #include <celmath/plane.h>
  12. #include <celmath/capsule.h>
  13. class Frustum
  14. {
  15.  public:
  16.     Frustum(float fov, float aspectRatio, float nearDist);
  17.     Frustum(float fov, float aspectRatio, float nearDist, float farDist);
  18.     void transform(const Mat3f&);
  19.     void transform(const Mat4f&);
  20.     inline Planef getPlane(int) const;
  21.     enum {
  22.         Bottom    = 0,
  23.         Top       = 1,
  24.         Left      = 2,
  25.         Right     = 3,
  26.         Near      = 4,
  27.         Far       = 5,
  28.     };
  29.     enum Aspect {
  30.         Outside   = 0,
  31.         Inside    = 1,
  32.         Intersect = 2,
  33.     };
  34.     Aspect test(const Point3f&) const;
  35.     Aspect testSphere(const Point3f& center, float radius) const;
  36.     Aspect testSphere(const Point3d& center, double radius) const;
  37.     Aspect testCapsule(const Capsulef&) const;
  38.  private:
  39.     void init(float, float, float, float);
  40.     Planef planes[6];
  41.     bool infinite;
  42. };
  43. Planef Frustum::getPlane(int which) const
  44. {
  45.     return planes[which];
  46. }
  47. #endif // _CELMATH_FRUSTUM_H_