00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef NVBLASTMATH_H
00030 #define NVBLASTMATH_H
00031
00032 #include <math.h>
00033
00034 namespace Nv
00035 {
00036 namespace Blast
00037 {
00038
00039 namespace VecMath
00040 {
00041
00042
00043 NV_INLINE void div(float a[3], float divisor)
00044 {
00045 for (int i = 0; i < 3; i++)
00046 a[i] /= divisor;
00047 }
00048
00049 NV_INLINE void mul(float a[3], float multiplier)
00050 {
00051 for (int i = 0; i < 3; i++)
00052 a[i] *= multiplier;
00053 }
00054
00055 NV_INLINE void add(const float a[3], float b[3])
00056 {
00057 for (int i = 0; i < 3; i++)
00058 b[i] = a[i] + b[i];
00059 }
00060
00061 NV_INLINE void add(const float a[3], const float b[3], float r[3])
00062 {
00063 for (int i = 0; i < 3; i++)
00064 r[i] = a[i] + b[i];
00065 }
00066
00067 NV_INLINE void sub(const float a[3], const float b[3], float r[3])
00068 {
00069 for (int i = 0; i < 3; i++)
00070 r[i] = a[i] - b[i];
00071 }
00072
00073 NV_INLINE float dot(const float a[3], const float b[3])
00074 {
00075 float r = 0;
00076 for (int i = 0; i < 3; i++)
00077 r += a[i] * b[i];
00078 return r;
00079 }
00080
00081 NV_INLINE float length(const float a[3])
00082 {
00083 return sqrtf(dot(a, a));
00084 }
00085
00086 NV_INLINE float dist(const float a[3], const float b[3])
00087 {
00088 float v[3];
00089 sub(a, b, v);
00090 return length(v);
00091 }
00092
00093 NV_INLINE float normal(const float a[3], float r[3])
00094 {
00095 float d = length(a);
00096 for (int i = 0; i < 3; i++)
00097 r[i] = a[i] / d;
00098
00099 return d;
00100 }
00101
00102
00103 }
00104
00105 }
00106 }
00107
00108
00109 #endif // #ifndef NVBLASTMATH_H