BVB Source Codes

CRYENGINE Show PolygonClipContext.h Source code

Return Download CRYENGINE: download PolygonClipContext.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _3DENGINE_POLYGONCLIPCONTEXT_H_
  4. #define _3DENGINE_POLYGONCLIPCONTEXT_H_
  5.  
  6. #if defined(LINUX)
  7.         #include <CryCore/Platform/platform.h>
  8. #endif
  9.  
  10. struct SPlaneObject
  11. {
  12.         Plane           plane;
  13.         Vec3_tpl<uint8> vIdx1, vIdx2;
  14.  
  15.         void            Update()
  16.         {
  17.                 //avoid breaking strict aliasing rules
  18.                 union f32_u
  19.                 {
  20.                         float  floatVal;
  21.                         uint32 uintVal;
  22.                 };
  23.                 f32_u ux;
  24.                 ux.floatVal = plane.n.x;
  25.                 f32_u uy;
  26.                 uy.floatVal = plane.n.y;
  27.                 f32_u uz;
  28.                 uz.floatVal = plane.n.z;
  29.                 uint32 bitX = ux.uintVal >> 31;
  30.                 uint32 bitY = uy.uintVal >> 31;
  31.                 uint32 bitZ = uz.uintVal >> 31;
  32.                 vIdx1.x = bitX * 3 + 0;
  33.                 vIdx2.x = (1 - bitX) * 3 + 0;
  34.                 vIdx1.y = bitY * 3 + 1;
  35.                 vIdx2.y = (1 - bitY) * 3 + 1;
  36.                 vIdx1.z = bitZ * 3 + 2;
  37.                 vIdx2.z = (1 - bitZ) * 3 + 2;
  38.         }
  39. };
  40.  
  41. ILINE bool IsABBBVisibleInFrontOfPlane_FAST(const AABB& objBox, const SPlaneObject& clipPlane)
  42. {
  43.         const f32* p = &objBox.min.x;
  44.         if ((clipPlane.plane | Vec3(p[clipPlane.vIdx2.x], p[clipPlane.vIdx2.y], p[clipPlane.vIdx2.z])) > 0)
  45.                 return true;
  46.  
  47.         return false;
  48. }
  49.  
  50. class CPolygonClipContext
  51. {
  52. public:
  53.         CPolygonClipContext();
  54.  
  55.         void                  Reset();
  56.  
  57.         const PodArray<Vec3>& Clip(const PodArray<Vec3>& poly, const Plane* planes, size_t numPlanes);
  58.         const PodArray<Vec3>& Clip(const Vec3& a, const Vec3& b, const Vec3& c, const Plane* planes, size_t numPlanes);
  59.  
  60.         void                  GetMemoryUsage(ICrySizer* pSizer) const;
  61.  
  62. private:
  63.         static int  ClipEdge(const Vec3& v1, const Vec3& v2, const Plane& ClipPlane, Vec3& vRes1, Vec3& vRes2);
  64.         static void ClipPolygon(PodArray<Vec3>& PolygonOut, const PodArray<Vec3>& pPolygon, const Plane& ClipPlane);
  65.         PodArray<Vec3> m_lstPolygonA;
  66.         PodArray<Vec3> m_lstPolygonB;
  67. };
  68.  
  69. #endif // _3DENGINE_POLYGONCLIPCONTEXT_H_
  70.  
downloadPolygonClipContext.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top