BVB Source Codes

CRYENGINE Show ParticleMathImpl.h Source code

Return Download CRYENGINE: download ParticleMathImpl.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. namespace pfx2
  4. {
  5.  
  6. // Vector functions
  7.  
  8. ILINE Vec3 HMin(const Vec3v& v0)
  9. {
  10.         return Vec3(
  11.           HMin(v0.x),
  12.           HMin(v0.y),
  13.           HMin(v0.z));
  14. }
  15.  
  16. ILINE Vec3 HMax(const Vec3v& v0)
  17. {
  18.         return Vec3(
  19.           HMax(v0.x),
  20.           HMax(v0.y),
  21.           HMax(v0.z));
  22. }
  23.  
  24. ILINE Vec3v Add(const Vec3v& a, floatv b)
  25. {
  26.         return Vec3v(a.x + b, a.y + b, a.z + b);
  27. }
  28. ILINE Vec3v Sub(const Vec3v& a, floatv b)
  29. {
  30.         return Vec3v(a.x - b, a.y - b, a.z - b);
  31. }
  32.  
  33. template<typename T>
  34. ILINE Vec3_tpl<T> MAdd(const Vec3_tpl<T>& a, const Vec3_tpl<T>& b, const Vec3_tpl<T>& c)
  35. {
  36.         return Vec3_tpl<T>(
  37.           MAdd(a.x, b.x, c.x),
  38.           MAdd(a.y, b.y, c.y),
  39.           MAdd(a.z, b.z, c.z));
  40. }
  41.  
  42. template<typename T>
  43. ILINE Vec3_tpl<T> MAdd(const Vec3_tpl<T>& a, T b, const Vec3_tpl<T>& c)
  44. {
  45.         return Vec3_tpl<T>(
  46.           MAdd(a.x, b, c.x),
  47.           MAdd(a.y, b, c.y),
  48.           MAdd(a.z, b, c.z));
  49. }
  50.  
  51. ILINE float DeltaTime(float normAge, float frameTime)
  52. {
  53.         return __fsel(normAge, frameTime, -(normAge * frameTime));
  54. }
  55.  
  56. ILINE uint8 FloatToUFrac8Saturate(float v)
  57. {
  58.         return uint8(saturate(v) * 255.0f + 0.5f);
  59. }
  60.  
  61. ILINE ColorF ToColorF(UCol color)
  62. {
  63.         return ColorF(
  64.           ufrac8_to_float(color.r),
  65.           ufrac8_to_float(color.g),
  66.           ufrac8_to_float(color.b));
  67. }
  68.  
  69. ILINE ColorFv ToColorFv(ColorF color)
  70. {
  71.         return ColorFv(
  72.           ToFloatv(color.r),
  73.           ToFloatv(color.g),
  74.           ToFloatv(color.b));
  75. }
  76.  
  77. ILINE UCol ColorFToUCol(const ColorF& color)
  78. {
  79.         UCol result;
  80.         result.r = float_to_ufrac8(color.r);
  81.         result.g = float_to_ufrac8(color.g);
  82.         result.b = float_to_ufrac8(color.b);
  83.         result.a = 0xff;
  84.         return result;
  85. }
  86.  
  87. ILINE void RotateAxes(Vec3* v0, Vec3* v1, float angle)
  88. {
  89.         CRY_PFX2_ASSERT(v0 && v1);
  90.         Vec2 vRot;
  91.         sincos(angle, &vRot.x, &vRot.y);
  92.         Vec3 vXAxis = *v0 * vRot.y - *v1 * vRot.x;
  93.         Vec3 vYAxis = *v0 * vRot.x + *v1 * vRot.y;
  94.         *v0 = vXAxis;
  95.         *v1 = vYAxis;
  96. }
  97.  
  98. ILINE Vec3 PolarCoordToVec3(float azimuth, float altitude)
  99. {
  100.         float azc, azs;
  101.         float alc, als;
  102.         sincos_tpl(azimuth, &azs, &azc);
  103.         sincos_tpl(altitude, &als, &alc);
  104.         return Vec3(azc*alc, azs*alc, als);
  105. }
  106.  
  107. }
  108.  
  109. #ifdef CRY_PFX2_USE_SSE
  110.         #include "ParticleMathImplSSE.h"
  111. #else
  112.  
  113. // PFX2_TODO : move all of this to another file (or just implement NEON for once)
  114. namespace pfx2
  115. {
  116.  
  117. ILINE floatv ToFloatv(float v)
  118. {
  119.         return v;
  120. }
  121.  
  122. ILINE uint32v ToUint32v(uint32 v)
  123. {
  124.         return v;
  125. }
  126.  
  127. ILINE floatv ToFloatv(int32v v)
  128. {
  129.         return floatv(v);
  130. }
  131.  
  132. ILINE Vec3v ToVec3v(Vec3 v)
  133. {
  134.         return v;
  135. }
  136.  
  137. ILINE Vec4v ToVec4v(Vec4 v)
  138. {
  139.         return v;
  140. }
  141.  
  142. ILINE Planev ToPlanev(Plane v)
  143. {
  144.         return v;
  145. }
  146.  
  147. ILINE float HMin(floatv v0)
  148. {
  149.         return v0;
  150. }
  151.  
  152. ILINE float HMax(floatv v0)
  153. {
  154.         return v0;
  155. }
  156.  
  157. ILINE ColorFv ToColorFv(UColv color)
  158. {
  159.         return ColorFv(
  160.           ufrac8_to_float(color.r),
  161.           ufrac8_to_float(color.g),
  162.           ufrac8_to_float(color.b));
  163. }
  164.  
  165. ILINE UColv ColorFvToUColv(const ColorFv& color)
  166. {
  167.         UColv result;
  168.         result.r = float_to_ufrac8(color.r);
  169.         result.g = float_to_ufrac8(color.g);
  170.         result.b = float_to_ufrac8(color.b);
  171.         result.a = 0xff;
  172.         return result;
  173. }
  174.  
  175. ILINE UColv ToUColv(UCol color)
  176. {
  177.         return color;
  178. }
  179.  
  180. ILINE Quat AddAngularVelocity(Quat initial, Vec3 angularVel, float deltaTime)
  181. {
  182.         const float haldDt = deltaTime * 0.5f;
  183.         const Quat rotated = Quat::exp(angularVel * haldDt) * initial;
  184.         return rotated.GetNormalized();
  185. }
  186.  
  187.  
  188. }
  189.  
  190. #endif
  191.  
downloadParticleMathImpl.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