Example #1
0
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;
}
Example #2
0
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);
}