Code: Select all
static void genCube(int n)
{
btScalar mass = 1;
btVector3 crysInertia(0, 0, 0);
double randOffset = (rand() % 10) - 5;
crysShape.push_back(new btBoxShape(btVector3(1, 1, 1)));
btQuaternion randomQ = btQuaternion(btVector3(rand(), rand(), rand()), rand());
crysMotionState.push_back(new btDefaultMotionState(btTransform(randomQ, btVector3(randOffset, 20, 0))));
crysShape[n]->calculateLocalInertia(mass, crysInertia);
crysRigidBody.push_back(new btRigidBody(mass, crysMotionState[n], crysShape[n], crysInertia));
simWorld->addRigidBody(crysRigidBody[currentNumCrystals]);
}
static void genPrism(int n)
{
btScalar mass = 1;
btVector3 crysInertia(0, 0, 0);
double randOffset = 0;
btConvexHullShape* prismShape = new btConvexHullShape();
btVector3 localInertia(0, 0, 0);
std::vector<std::vector<float>> testCrystal = crysVertices[0]; //currently just a vector with the 8 corners of a 2x2x2 cube (0,0,0) (2,0,0) etc.
for (int i = 0; i < testCrystal.size(); i++)
{
float x = testCrystal[i][0];
float y = testCrystal[i][1];
float z = testCrystal[i][2];
prismShape->addPoint(btVector3(x,y,z),false);
}
prismShape->recalcLocalAabb();
crysShape.push_back(prismShape);
crysShape[n]->calculateLocalInertia(mass, crysInertia);
btQuaternion randomQ = btQuaternion(btVector3(rand(), rand(), rand()), rand());
btVector3 randomR = (btVector3(randOffset, 20, 0));
crysMotionState.push_back(new btDefaultMotionState(btTransform(randomQ, randomR)));
crysRigidBody.push_back(new btRigidBody(mass, crysMotionState[n], crysShape[n], crysInertia));
simWorld->addRigidBody(crysRigidBody[currentNumCrystals]); //I actually do this in another function
}