aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/shared/internal/src/authoring/NoiseUtils.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/internal/src/authoring/NoiseUtils.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/internal/src/authoring/NoiseUtils.h')
-rw-r--r--APEX_1.4/shared/internal/src/authoring/NoiseUtils.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/APEX_1.4/shared/internal/src/authoring/NoiseUtils.h b/APEX_1.4/shared/internal/src/authoring/NoiseUtils.h
new file mode 100644
index 00000000..e284b616
--- /dev/null
+++ b/APEX_1.4/shared/internal/src/authoring/NoiseUtils.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+
+#ifndef NOISE_UTILS_H
+#define NOISE_UTILS_H
+
+#include "authoring/ApexCSGMath.h"
+
+#ifndef WITHOUT_APEX_AUTHORING
+
+namespace ApexCSG
+{
+
+template<typename T>
+PX_INLINE T fade(T t) { return t * t * t * (t * (t * (T)6.0 - (T)15.0) + (T)10.0); }
+
+template<typename T>
+PX_INLINE T lerp(T t, T a, T b) { return a + t * (b - a); }
+
+template<typename T, class VecT, int SampleSize>
+PX_INLINE void setup(int i, VecT& point, T& t, int& b0, int& b1, T& r0, T& r1)
+{
+ t = point[i] + (0x1000);
+ b0 = ((int)t) & (SampleSize-1);
+ b1 = (b0+1) & (SampleSize-1);
+ r0 = t - (int)t;
+ r1 = r0 - 1.0f;
+}
+
+template<typename T, class VecT>
+PX_INLINE T at2(const T& rx, const T& ry, const VecT& q)
+{
+ return rx * q[0] + ry * q[1];
+}
+
+template<typename T, class VecT>
+PX_INLINE T at3(const T& rx, const T& ry, const T& rz, const VecT& q)
+{
+ return rx * q[0] + ry * q[1] + rz * q[2];
+}
+
+///////////////////////////////////////////////////////////////////////////
+
+template<typename T, int SampleSize>
+T noiseSample(ApexCSG::Vec<T, 1> point, int* p, ApexCSG::Vec<T,1>* g)
+{
+ int bx0, bx1;
+ T rx0, rx1, sx, t, u, v;
+
+ setup<T,Vec<T,1>,SampleSize>(0, point,t, bx0,bx1, rx0,rx1);
+
+ sx = fade(rx0);
+
+ u = rx0 * g[ p[ bx0 ] ];
+ v = rx1 * g[ p[ bx1 ] ];
+
+ return lerp(sx, u, v);
+}
+
+template<typename T, int SampleSize>
+T noiseSample(Vec<T,2> point, int* p, Vec<T,2>* g)
+{
+ int bx0, bx1, by0, by1, b00, b10, b01, b11;
+ T rx0, rx1, ry0, ry1, sx, sy, a, b, t, u, v;
+ Vec<T,2> q;
+ int i, j;
+
+ setup<T,Vec<T,2>,SampleSize>(0, point,t, bx0,bx1, rx0,rx1);
+ setup<T,Vec<T,2>,SampleSize>(1, point,t, by0,by1, ry0,ry1);
+
+ i = p[bx0];
+ j = p[bx1];
+
+ b00 = p[i + by0];
+ b10 = p[j + by0];
+ b01 = p[i + by1];
+ b11 = p[j + by1];
+
+ sx = fade(rx0);
+ sy = fade(ry0);
+
+ q = g[b00];
+ u = at2(rx0,ry0,q);
+ q = g[b10];
+ v = at2(rx1,ry0,q);
+ a = lerp(sx, u, v);
+
+ q = g[b01];
+ u = at2(rx0,ry1,q);
+ q = g[b11];
+ v = at2(rx1,ry1,q);
+ b = lerp(sx, u, v);
+
+ return lerp(sy, a, b);
+}
+
+template<typename T, int SampleSize>
+T noiseSample(Vec<T,3> point, int* p, Vec<T,3>* g)
+{
+ int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
+ T rx0, rx1, ry0, ry1, rz0, rz1, sy, sz, a, b, c, d, t, u, v;
+ Vec<T,3> q;
+ int i, j;
+
+ setup<T,Vec<T,3>,SampleSize>(0, point,t, bx0,bx1, rx0,rx1);
+ setup<T,Vec<T,3>,SampleSize>(1, point,t, by0,by1, ry0,ry1);
+ setup<T,Vec<T,3>,SampleSize>(2, point,t, bz0,bz1, rz0,rz1);
+
+ i = p[ bx0 ];
+ j = p[ bx1 ];
+
+ b00 = p[ i + by0 ];
+ b10 = p[ j + by0 ];
+ b01 = p[ i + by1 ];
+ b11 = p[ j + by1 ];
+
+ t = fade(rx0);
+ sy = fade(ry0);
+ sz = fade(rz0);
+
+ q = g[ b00 + bz0 ] ; u = at3(rx0,ry0,rz0,q);
+ q = g[ b10 + bz0 ] ; v = at3(rx1,ry0,rz0,q);
+ a = lerp(t, u, v);
+
+ q = g[ b01 + bz0 ] ; u = at3(rx0,ry1,rz0,q);
+ q = g[ b11 + bz0 ] ; v = at3(rx1,ry1,rz0,q);
+ b = lerp(t, u, v);
+
+ c = lerp(sy, a, b);
+
+ q = g[ b00 + bz1 ] ; u = at3(rx0,ry0,rz1,q);
+ q = g[ b10 + bz1 ] ; v = at3(rx1,ry0,rz1,q);
+ a = lerp(t, u, v);
+
+ q = g[ b01 + bz1 ] ; u = at3(rx0,ry1,rz1,q);
+ q = g[ b11 + bz1 ] ; v = at3(rx1,ry1,rz1,q);
+ b = lerp(t, u, v);
+
+ d = lerp(sy, a, b);
+
+ return lerp(sz, c, d);
+}
+
+}
+
+#endif /* #ifndef WITHOUT_APEX_AUTHORING */
+
+#endif /* #ifndef NOISE_UTILS_H */ \ No newline at end of file