KinematicModel::CompositeObject* ObjectSoup::makeARandomObjectLikeAMothaFucka() { KinematicModel::CompositeObject* obj = new KinematicModel::CompositeObject( theModel.OBSTACLE(), theModel.OBSTACLE() ); // choose a random color for the object QColor collidingColor = QColor( qrand()%255, qrand()%255, qrand()%255, 0.5 ); QColor freeColor = collidingColor; freeColor.setAlphaF( 1.0 ); obj->setCollidingColor(collidingColor); obj->setFreeColor(freeColor); // choose a random number of primitives to append to the object 1 to 5 inclusive int numPrimitives = (qrand() % 6 + 1); if (verbose) printf( " Num Primitives: %d\n", numPrimitives); KinematicModel::PrimitiveObject* primitive; for ( int j=0; j<numPrimitives; ++j ) { // choose a random geometry type for each primitive KinematicModel::GeomType geomType = (KinematicModel::GeomType)( qrand() % ((int)KinematicModel::BOX+1) ); if (verbose) printf( " Geometry Type: %d\n", (int)geomType ); switch (geomType) { case KinematicModel::SPHERE: primitive = new KinematicModel::Sphere( (float)qrand()/RAND_MAX/10.0+0.01 ); break; case KinematicModel::CYLINDER: primitive = new KinematicModel::Cylinder( (float)qrand()/RAND_MAX/10+.01, (float)2*qrand()/RAND_MAX/10+.01 ); break; case KinematicModel::BOX: primitive = new KinematicModel::Box( QVector3D((float)qrand()/RAND_MAX/10+.01, (float)qrand()/RAND_MAX/10+.01, (float)qrand()/RAND_MAX/10+.01) ); break; default: break; } primitive->setCollidingColor( collidingColor ); primitive->setFreeColor(freeColor); primitive->translate(randomTranslation(0.1)); primitive->cartesianRotate(randomRotation()); obj->appendPrimitive(primitive); } obj->translate(randomTranslation(1.0)); primitive->cartesianRotate(randomRotation()); theModel.appendObject(obj); return obj; }
void ObjectsMenager::CreateRandomModelMatrix(unsigned int minSize,unsigned int maxSize,int minPosition,int maxPosition,Object &obj) { boost::random::uniform_int_distribution<> randomSize(minSize,maxSize); boost::random::uniform_int_distribution<> randomPosition(minPosition,maxPosition); boost::random::uniform_int_distribution<> randomRotation(-360,360); float s = randomSize(rng); glm::vec3 scale(s,s,s); float x = randomPosition(rng); float y = randomPosition(rng); float z = randomPosition(rng); glm::vec3 position(x,y,z); float rotateX=randomRotation(rng); float rotateY=randomRotation(rng); float rotateZ=randomRotation(rng); glm::mat4 rotationMatrix=glm::eulerAngleYXZ(rotateY,rotateX,rotateZ); obj.SetModelMatrix(position,rotationMatrix,scale); }