Simple Mesh-Mesh collision
Page 1 of 1
Simple Mesh-Mesh collision
This is a simple example how to perform a Mesh-Mesh collision.
I'm not sure if I've done all right, but it's working pretty good.
The version used is 1.3.
I'm not sure if I've done all right, but it's working pretty good.
The version used is 1.3.
- Code:
void CheckCollision()
{
IceMaths::Point vertices0[] =
{
Point(0, 0, 0),
Point(1, 0, 0),
Point(1, 1, 0),
Point(0, 1, 0)
};
IceMaths::Point vertices1[] =
{
Point(0, 0, 1),
Point(1, 0, 1),
Point(1, 1, 1),
Point(0, 1, 1)
};
Matrix4x4* transformation0 = new Matrix4x4(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1);
Matrix4x4* transformation1 = new Matrix4x4(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1);
IndexedTriangle indices[] =
{
*(new IndexedTriangle(0, 1, 2)),
*(new IndexedTriangle(0, 2, 3))
};
MeshInterface* mesh0 = GetMeshInterface(indices, vertices0, 2, 4);
MeshInterface* mesh1 = GetMeshInterface(indices, vertices1, 2, 4);
Model* model0 = GetModel(mesh0);
Model* model1 = GetModel(mesh1);
BVTCache* cache = new BVTCache();
cache->Model0 = model0;
cache->Model1 = model1;
AABBTreeCollider* collider = new AABBTreeCollider();
bool checkDone = collider->Collide(*cache, transformation0, transformation1);
Assert::IsTrue(checkDone);
bool contactFound = collider->GetContactStatus();
Assert::IsFalse(contactFound);
}
Model* GetModel(MeshInterface* mesh)
{
BuildSettings* buildSettings = new BuildSettings();
buildSettings->mLimit = 1;
buildSettings->mRules = SPLIT_BEST_AXIS | SPLIT_SPLATTER_POINTS | SPLIT_GEOM_CENTER;
OPCODECREATE* data = new OPCODECREATE();
data->mCanRemap = false;
data->mIMesh = mesh;
data->mKeepOriginal = false;
data->mNoLeaf = false;
data->mQuantized = true;
data->mSettings = *buildSettings;
Model* model = new Model();
bool modelCreated = model->Build(*data);
Assert::IsTrue(modelCreated);
return model;
}
MeshInterface* GetMeshInterface(IndexedTriangle* indices, Point* vertices, udword nrTriangles, udword nrVertices)
{
MeshInterface* meshInterface = new MeshInterface();
meshInterface->SetNbTriangles(nrTriangles);
meshInterface->SetNbVertices(nrVertices);
bool pointersSet = meshInterface->SetPointers(indices, vertices);
Assert::IsTrue(pointersSet);
udword degeneratedFaces = meshInterface->CheckTopology();
Assert::IsTrue(degeneratedFaces == 0);
Assert::IsTrue(meshInterface->IsValid());
return meshInterface;
}
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|