aboutsummaryrefslogtreecommitdiff
path: root/KaplaDemo/samples/sampleViewer3/Fracture/Compound.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 /KaplaDemo/samples/sampleViewer3/Fracture/Compound.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 'KaplaDemo/samples/sampleViewer3/Fracture/Compound.cpp')
-rw-r--r--KaplaDemo/samples/sampleViewer3/Fracture/Compound.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/KaplaDemo/samples/sampleViewer3/Fracture/Compound.cpp b/KaplaDemo/samples/sampleViewer3/Fracture/Compound.cpp
new file mode 100644
index 00000000..c73b2ecf
--- /dev/null
+++ b/KaplaDemo/samples/sampleViewer3/Fracture/Compound.cpp
@@ -0,0 +1,161 @@
+
+#include "Mesh.h"
+#include "CompoundGeometry.h"
+#include "CompoundCreator.h"
+#include "PxConvexMeshGeometry.h"
+#include "PxRigidBodyExt.h"
+#include "foundation/PxMat44.h"
+#include "PxScene.h"
+#include "PxShape.h"
+
+#include "SimScene.h"
+#include "Compound.h"
+#include "Convex.h"
+#include "XMLParser.h"
+#include "foundation/PxMathUtils.h"
+
+#include <vector>
+
+#include <stdio.h>
+
+#include "MathUtils.h"
+
+using namespace std;
+
+#define CREATE_DEBRIS 1
+
+float Compound::getSleepingThresholdRB()
+{
+ return 0.1f;
+}
+
+// --------------------------------------------------------------------------------------------
+void Compound::draw(bool useShader, bool debug)
+{
+ if (useShader && mShader)
+ mShader->activate(mShaderMat);
+ else {
+ glColor3f(mShaderMat.color[0], mShaderMat.color[1], mShaderMat.color[2]);
+ }
+
+ for (int i = 0; i < (int)mConvexes.size(); i++)
+ mConvexes[i]->draw(debug);
+
+ if (useShader && mShader)
+ mShader->deactivate();
+}
+
+// --------------------------------------------------------------------------------------------
+void Compound::clear()
+{
+ base::Compound::clear();
+
+ mShader = NULL;
+ mShaderMat.init();
+}
+
+void Compound::copyShaders(base::Compound* m)
+{
+ ((Compound*)m)->mShader = mShader;
+ ((Compound*)m)->mShaderMat = mShaderMat;
+}
+
+// --------------------------------------------------------------------------------------------
+bool Compound::createFromXml(XMLParser *p, float scale, const PxTransform &trans, bool ignoreVisualMesh)
+{
+ clear();
+ PxVec3 center;
+
+ for (int i = 0; i < (int)p->vars.size(); i++) {
+ if (p->vars[i].name == "name") {
+ // not used currently
+ }
+ else if (p->vars[i].name == "centerX")
+ sscanf(p->vars[i].value.c_str(), "%f", &center.x);
+ else if (p->vars[i].name == "centerY")
+ sscanf(p->vars[i].value.c_str(), "%f", &center.y);
+ else if (p->vars[i].name == "centerZ")
+ sscanf(p->vars[i].value.c_str(), "%f", &center.z);
+ }
+ p->readNextTag();
+
+ // create Px objects
+ shdfnd::Array<PxShape*> shapes;
+
+ while (!p->endOfFile() && p->tagName != "Compound") {
+ if (p->tagName == "Convex") {
+ Convex *c = (Convex*)mScene->createConvex();
+ if (!c->createFromXml(p, scale, ignoreVisualMesh)) {
+ delete c;
+ return false;
+ }
+ c->increaseRefCounter();
+
+ // added overlap test in island detector, no need for ghost anymore!
+ if (c->isGhostConvex()) {
+// mConvexes.pushBack(c);
+ continue;
+ }
+
+ bool reused = c->getPxConvexMesh() != NULL;
+
+ PxConvexMesh* mesh = c->createPxConvexMesh(this, mScene->getPxPhysics(), mScene->getPxCooking());
+ if (mesh == NULL) {
+ delete c;
+ continue;
+ }
+
+ if (!reused)
+ convexAdded(c, NULL); //mScene->getConvexRenderer().add(c);
+
+ PxShape *shape = mScene->getPxPhysics()->createShape(
+ PxConvexMeshGeometry(mesh),
+ *mScene->getPxDefaultMaterial(),
+ true
+ );
+ shape->setLocalPose(c->getLocalPose());
+
+ //shape->setContactOffset(mContactOffset);
+ //shape->setRestOffset(mRestOffset);
+
+ if (mContactOffset < mRestOffset || mContactOffset < 0.0f)
+ {
+ printf("WRONG2\n");
+ }
+
+ mScene->mapShapeToConvex(*shape, *c);
+
+ shapes.pushBack(shape);
+
+ if (!c->hasExplicitVisMesh())
+ c->createVisMeshFromConvex();
+
+ mConvexes.pushBack(c);
+ }
+ }
+ p->readNextTag();
+
+ PxVec3 vel(0.0f, 0.0f, 0.0f);
+ PxVec3 omega(0.0f, 0.0f, 0.0f);
+ createPxActor(shapes, trans * PxTransform(scale * center), vel, omega);
+
+ bool indestructible = false;
+ for (int i = 0; i < (int)mConvexes.size(); i++) {
+ if (mConvexes[i]->isIndestructible()) {
+ indestructible = true;
+ break;
+ }
+ }
+
+ return true;
+}
+
+void Compound::convexAdded(base::Convex* c, Shader* shader)
+{
+ ((SimScene*)mScene)->getConvexRenderer().add(c, shader);
+}
+
+void Compound::convexRemoved(base::Convex* c)
+{
+ ((SimScene*)mScene)->getConvexRenderer().remove(c);
+} \ No newline at end of file