Moderators: Sascha Willems, walaber
NewtonCollision* compoundCollision = NewtonCreateCompoundCollision(world, 0);
NewtonCompoundCollisionBeginAddRemove(compoundCollision);
NewtonCollision* boxCollision = NewtonCreateBox(world, 50, 50, 50, 0, NULL);
NewtonCompoundCollisionAddSubCollision(compoundCollision, boxCollision);
NewtonDestroyCollision(boxCollision);
NewtonCompoundCollisionEndAddRemove(compoundCollision);
NewtonBody* compoundBody = NewtonCreateDynamicBody(world, compoundCollision);
NewtonDestroyCollision(compoundCollision);
// scale after creating body slows everything down. Without the scale it runs fine even though the body is huge
NewtonCollisionSetScale(NewtonBodyGetCollision(compoundBody), 0.05f, 0.05f, 0.05f);
NewtonCompoundCollisionBeginAddRemove(compoundCollision);
std::vector<NewtonCollision*> childCollisions;
for (void* collisionNode = NewtonCompoundCollisionGetFirstNode(compoundCollision); collisionNode;)
{
void* nextCollisionNode = NewtonCompoundCollisionGetNextNode(compoundCollision, collisionNode);
// copy collision
NewtonCollision* convexCollision = NewtonCompoundCollisionGetCollisionFromNode(compoundCollision, collisionNode);
convexCollision = NewtonCollisionCreateInstance(convexCollision);
// save it
childCollisions.push_back(convexCollision);
// remove collision
NewtonCompoundCollisionRemoveSubCollision(compoundCollision, collisionNode);
collisionNode = nextCollisionNode;
}
for (size_t i = 0; i < childCollisions.size(); ++i)
{
NewtonCollision* convexCollision = childCollisions[i];
// scale and add collision
NewtonCollisionSetScale(convexCollision, scale.x, scale.y, scale.z);
NewtonCompoundCollisionAddSubCollision(compoundCollision, convexCollision);
NewtonDestroyCollision(convexCollision);
}
NewtonCompoundCollisionEndAddRemove(compoundCollision);
void MakeSingleCompound(DemoEntityManager* const scene)
{
NewtonWorld* const world = scene->GetNewton();
NewtonCollision* compoundCollision = NewtonCreateCompoundCollision(world, 0);
NewtonCompoundCollisionBeginAddRemove(compoundCollision);
NewtonCollision* boxCollision = NewtonCreateBox(world, 50, 50, 50, 0, NULL);
NewtonCompoundCollisionAddSubCollision(compoundCollision, boxCollision);
NewtonDestroyCollision(boxCollision);
dMatrix matrix(GetIdentityMatrix());
matrix.m_posit.m_y = 10.0f;
NewtonCompoundCollisionEndAddRemove(compoundCollision);
NewtonBody* compoundBody = NewtonCreateDynamicBody(world, compoundCollision, &matrix[0][0]);
NewtonDestroyCollision(compoundCollision);
// scale after creating body slows everything down. Without the scale it runs fine even though the body is huge
NewtonCollisionSetScale(NewtonBodyGetCollision(compoundBody), 0.05f, 0.05f, 0.05f);
// adding some visualization
DemoMesh* mesh = new DemoMesh("geometry", NewtonBodyGetCollision(compoundBody), "smilli.tga", "smilli.tga", "smilli.tga");
DemoEntity* const entity = new DemoEntity(matrix, NULL);
entity->SetMesh(mesh);
mesh->Release();
NewtonBodySetUserData(compoundBody, entity);
scene->Append(entity);
}
1> "..\..\sdkDemos\demos\PrimitiveCollision.cpp"
1>PrimitiveCollision.cpp
1>..\..\sdkDemos\demos\PrimitiveCollision.cpp(114) : error C2660: 'NewtonCreateDynamicBody' : function does not take 2 arguments
1>ConvexCast.cpp
Layla wrote:Maybe it will be best to leave it until I can recreate it. I can scale by taking everything out of the compound and putting them back in
Users browsing this forum: No registered users and 1 guest