aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/clothing/src/ModuleClothingHelpers.cpp
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/module/clothing/src/ModuleClothingHelpers.cpp
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/module/clothing/src/ModuleClothingHelpers.cpp')
-rw-r--r--APEX_1.4/module/clothing/src/ModuleClothingHelpers.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/APEX_1.4/module/clothing/src/ModuleClothingHelpers.cpp b/APEX_1.4/module/clothing/src/ModuleClothingHelpers.cpp
new file mode 100644
index 00000000..7fbe1c46
--- /dev/null
+++ b/APEX_1.4/module/clothing/src/ModuleClothingHelpers.cpp
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+
+
+#include "ApexDefs.h"
+
+#include "ModuleClothingHelpers.h"
+#include "AbstractMeshDescription.h"
+
+namespace nvidia
+{
+namespace apex
+{
+
+void AbstractMeshDescription::UpdateDerivedInformation(RenderDebugInterface* renderDebug)
+{
+ if (numIndices > 0)
+ {
+ pMin = pPosition[pIndices[0]];
+ pMax = pMin;
+ }
+ avgEdgeLength = 0;
+ avgTriangleArea = 0;
+
+ uint32_t triCount(numIndices / 3);
+ uint32_t edgeCount(numIndices);
+ for (uint32_t j = 0; j < numIndices; j += 3)
+ {
+ uint32_t i0 = pIndices[j + 0];
+ uint32_t i1 = pIndices[j + 1];
+ uint32_t i2 = pIndices[j + 2];
+
+ const PxVec3& v0 = pPosition[i0];
+ const PxVec3& v1 = pPosition[i1];
+ const PxVec3& v2 = pPosition[i2];
+
+ pMin.minimum(v0);
+ pMin.minimum(v1);
+ pMin.minimum(v2);
+
+ pMax.maximum(v0);
+ pMax.maximum(v1);
+ pMax.maximum(v2);
+
+ PxVec3 e0 = v1 - v0;
+ PxVec3 e1 = v2 - v1;
+ PxVec3 e2 = v0 - v2;
+
+ avgEdgeLength += e0.magnitude();
+ avgEdgeLength += e1.magnitude();
+ avgEdgeLength += e2.magnitude();
+
+
+ if (renderDebug)
+ {
+ using RENDER_DEBUG::DebugColors;
+ RENDER_DEBUG_IFACE(renderDebug)->setCurrentColor(RENDER_DEBUG_IFACE(renderDebug)->getDebugColor(DebugColors::DarkBlue));
+ RENDER_DEBUG_IFACE(renderDebug)->debugLine(v0, v1);
+ RENDER_DEBUG_IFACE(renderDebug)->debugLine(v1, v2);
+ RENDER_DEBUG_IFACE(renderDebug)->debugLine(v2, v0);
+ RENDER_DEBUG_IFACE(renderDebug)->setCurrentColor(RENDER_DEBUG_IFACE(renderDebug)->getDebugColor(DebugColors::Green));
+ RENDER_DEBUG_IFACE(renderDebug)->debugPoint(v0, 0.1f);
+ RENDER_DEBUG_IFACE(renderDebug)->debugPoint(v1, 0.1f);
+ RENDER_DEBUG_IFACE(renderDebug)->debugPoint(v2, 0.1f);
+ }
+
+ float triangleArea = e0.cross(e2).magnitude() * 0.5f;
+ avgTriangleArea += triangleArea;
+ triCount++;
+ }
+
+ avgEdgeLength /= edgeCount;
+ avgTriangleArea /= triCount;
+ centroid = 0.5f * (pMin + pMax);
+ radius = 0.5f * (pMax - pMin).magnitude();
+
+ //printf("Min = <%f, %f, %f>; Max = <%f, %f, %f>; centroid = <%f, %f, %f>; radius = %f; avgEdgeLength = %f; avgTriangleArea = %f;\n",
+ // pMin.x, pMin.y, pMin.z, pMax.x, pMax.y, pMax.z, centroid.x, centroid.y, centroid.z, radius, avgEdgeLength, avgTriangleArea);
+}
+
+}
+} // namespace nvidia
+