Example #1
0
void CCar::MakeParts(neSimulator * sim, neV3 & pos)
{
	s32 i;

	for (i = 0; i < N_PARTS; i++)
	{
		neRigidBody * rb = sim->CreateRigidBody();

		if (id == 0 ) //make it harder to sleep
			rb->SetSleepingParameter(0.1f);

		rb->SetPos(parts[i].position + pos);

		neGeometry * geom = rb->AddGeometry();

		geom->SetBoxSize(parts[i].boxSize);

		rb->SetMass(0.01f);

		rb->UpdateBoundingInfo();

		rb->SetInertiaTensor(neBoxInertiaTensor(parts[i].boxSize, 0.01f));

		neJoint * joint = sim->CreateJoint(rb, carRigidBody);

		neT3 trans;

		trans.pos = parts[i].jointPos + pos;

		trans.rot.RotateXYZ(parts[i].jointRot);

		joint->SetJointFrameWorld(trans);

		joint->SetType(neJoint::NE_JOINT_HINGE);

		joint->SetLowerLimit(parts[i].lowerLimit);

		joint->SetUpperLimit(parts[i].upperLimit);

		joint->SetEpsilon(0.0f);

		joint->SetIteration(4);

		joint->EnableLimit(true);

		joint->Enable(true);

		carParts[i] = rb;

//		CRenderPrimitive * renderPrim = AddRenderPrimitive();
//
//		renderPrim->SetGraphicBox(parts[i].boxSize[0], parts[i].boxSize[1], parts[i].boxSize[2]);
//
//		geom->SetUserData((u32)renderPrim);
	}
}
void CSampleRigidParticlesAndTerrain::MakeParticle(neV3 position, s32 index)
{
	//const f32 groundLevel = -10.0f;

	s32 cur;

	cur = index;

	box[cur] = sim->CreateRigidParticle();

	neGeometry * geom = box[cur]->AddGeometry();

	neV3 boxSize1; boxSize1.Set(1.f, 1.f, 1.f);

	geom->SetBoxSize(boxSize1[0],boxSize1[1],boxSize1[2]);

	box[cur]->UpdateBoundingInfo();

	f32 mass = 0.1f;

	box[cur]->SetInertiaTensor(neBoxInertiaTensor(boxSize1[0], boxSize1[1], boxSize1[2], mass));

	box[cur]->SetMass(mass);

	box[cur]->SetPos(position);

	//graphic
	boxRenderPrimitives[cur].SetGraphicBox(boxSize1[0],boxSize1[1],boxSize1[2]);


	if ((cur % 4) == 0)
	{
		boxRenderPrimitives[cur].SetDiffuseColor(D3DXCOLOR(0.8f, 0.2f, 0.2f, 1.0f));

	}
	else if ((cur % 4) == 1)
	{
		boxRenderPrimitives[cur].SetDiffuseColor(D3DXCOLOR(0.2f, 0.4f, 0.6f, 1.0f));

	}
	else if ((cur % 4) == 2)
	{
		boxRenderPrimitives[cur].SetDiffuseColor(D3DXCOLOR(0.2f, 0.6f, 0.2f, 1.0f));
	}
	else
	{
		boxRenderPrimitives[cur].SetDiffuseColor(D3DXCOLOR(0.6f, 0.6f, 0.2f, 1.0f));
	}

}
Example #3
0
void TConvex::Initialise()
{
	SetBoxSize(1.0f, 1.0f, 1.0f);
	neT3 t;
	t.SetIdentity();
	SetTransform(t);
	matIndex = 0;
	//id = 0;
	userData = 0;

	breakInfo.mass = 1.0f;
	breakInfo.inertiaTensor = neBoxInertiaTensor(1.0f, 1.0f, 1.0f, 1.0f);
	breakInfo.breakMagnitude = 0.0f;
	breakInfo.breakAbsorb = 0.5f;
	breakInfo.neighbourRadius = 0.0f;
	breakInfo.flag = neGeometry::NE_BREAK_DISABLE; //break all,
	breakInfo.breakPlane.SetZero();
}
void CSampleBreakageObjects::MakeTable(neV3 position, s32 index)
{
	//const f32 groundLevel = -10.0f;

	neV3 tableSize;

	tableSize.Set(3.0f, 1.0f, 3.0f);

	s32 cur;

	cur = index;

	rigidBodies[cur] = sim->CreateRigidBody();

	rigidBodies[cur]->SetInertiaTensor(neBoxInertiaTensor(tableSize, 2.0f));

	rigidBodies[cur]->SetMass(2.0f);

	//position[1] = groundLevel + 0.95f * (1 + cur) + (0.15f * cur);

	rigidBodies[cur]->SetPos(position);

	neQ rot;

	rot.X = ((f32)rand()) /RAND_MAX;
	rot.Y = ((f32)rand()) /RAND_MAX;
	rot.Z = ((f32)rand()) /RAND_MAX;
	rot.W = ((f32)rand()) /RAND_MAX;

	rot.Normalize();

	rigidBodies[cur]->SetRotation(rot);

	for (s32 i = 0; i < GEOMETRY_PER_TABLE; i++)
	{
		neGeometry * geom = rigidBodies[cur]->AddGeometry();

		geom->SetUserData((u32) (cur * GEOMETRY_PER_TABLE + i));

		geom->SetBoxSize(tableData[i].size);

		neT3 trans;

		trans.SetIdentity();

		trans.pos = tableData[i].pos;

		geom->SetTransform(trans);

		geom->SetBreakageFlag(tableData[i].breakFlag);

		geom->SetBreakageMass(tableData[i].breakageMass);

		geom->SetBreakageInertiaTensor(neBoxInertiaTensor(tableData[i].size, tableData[i].breakageMass));

		geom->SetBreakageMagnitude(tableData[i].breakageMagnitude);

		geom->SetBreakageAbsorption(tableData[i].breakageAbsorption);

		neV3 plane;

		plane.Set(0.0f, 1.0f, 0.0f);

		geom->SetBreakagePlane(plane);

		//graphic
		boxRenderPrimitives[geom->GetUserData()].SetGraphicBox(tableData[i].size.X(),tableData[i].size.Y(),tableData[i].size.Z());

		if (i % 3 == 0)
		{
			boxRenderPrimitives[geom->GetUserData()].SetDiffuseColor(D3DXCOLOR(0.8f, 0.2f, 0.2f, 1.0f));
		}
		else if (i % 3 == 1)
		{
			boxRenderPrimitives[geom->GetUserData()].SetDiffuseColor(D3DXCOLOR(0.3f,	0.3f, 1.0f, 1.0f));
		}
		else
		{
			boxRenderPrimitives[geom->GetUserData()].SetDiffuseColor(D3DXCOLOR(0.2f,	0.8f, 0.2f, 1.0f));
		}
	}
	rigidBodies[cur]->UpdateBoundingInfo();

}
void CSampleHingeJointMotorOn::InititialisePhysics()
{
	f32 ypos = -7;

	neV3 gravity; gravity.Set(0.0f, -9.0f, 0.0f);
	//neV3 gravity; gravity.Set(-9.0f, 0.0f, 0.0f);

	//f32 linkLength = 2.2f;
	f32 linkLength = -0.0f;

	neSimulatorSizeInfo sizeInfo;

	sizeInfo.rigidBodiesCount = N_TOTAL_BODIES;
	sizeInfo.animatedBodiesCount = WALL_NUMBER;
	sizeInfo.geometriesCount = N_TOTAL_BODIES + WALL_NUMBER;
	sizeInfo.overlappedPairsCount = 2000;//MAX_OVERLAPPED_PAIR;

	{ //dont need any of these
		sizeInfo.terrainNodesStartCount = 0;
		sizeInfo.rigidParticleCount = 0;
	}

	sim = neSimulator::CreateSimulator(sizeInfo, &all, &gravity);

	//create the kart body

	f32 mass = 1.0f;

	rigidBodies[0] = sim->CreateRigidBody();

	rigidBodies[0]->SetMass(mass);

	neGeometry * geom = rigidBodies[0]->AddGeometry();

	neV3 boxSize; boxSize.Set(3.0f, 3.f, 1.0f);

	geom->SetBoxSize(boxSize);

	rigidBodies[0]->UpdateBoundingInfo();

	rigidBodies[0]->SetInertiaTensor(neBoxInertiaTensor(boxSize, mass));

	neV3 pos; pos.Set(0.0f, ypos, 0.0f);

	rigidBodies[0]->SetPos(pos);

	rigidBodies[0]->SetSleepingParameter(.0f);

	//create the 4 wheels (sphere)

	s32 j = 1;

	ypos -= 2.0f;

	for (int i = 0; i < 4; i++)
	{
		neRigidBody * rb;

		rigidBodies[j++] = rb = sim->CreateRigidBody();

		rb->SetMass(mass);

		geom = rb->AddGeometry();

		geom->SetBoxSize(2.0f, .5f, 1.0f);//SetSphereDiameter(1.0f);

		//geom->SetSphereDiameter(1.0f);

		rb->UpdateBoundingInfo();

		//rb->SetInertiaTensor(neSphereInertiaTensor(1.0f, 0.1f));

		rb->SetInertiaTensor(neBoxInertiaTensor(2.0f, .5f, 1.0f, mass));

		neV3 pos;

		switch(i)
		{
		case 0: pos.Set(-1.5f, ypos, 1.0f);
			break;
		case 1: pos.Set(-1.5f, ypos, -1.0f);
			break;
		case 2: pos.Set(1.5f, ypos, 1.0f);
			break;
		case 3: pos.Set(1.5f, ypos, -1.0f);
			break;
		}
		rb->SetPos(pos);

		neJoint * joint = sim->CreateJoint(rigidBodies[0], rb);

		joint->SetIteration(1);

		neT3 jointFrame;

		jointFrame.rot[0].Set(1.0f, 0.0f, 0.0f);
		jointFrame.rot[1].Set(0.0f, 0.0f, -1.0f);
		jointFrame.rot[2].Set(0.0f, 1.0f, 0.0f);
		jointFrame.pos = pos;

		joint->SetJointFrameWorld(jointFrame);
		joint->SetType(neJoint::NE_JOINT_HINGE);
		joint->Enable(true);
		joint->EnableMotor(true);
		joint->SetMotor(neJoint::NE_MOTOR_SPEED, 1.f, 50.f);
	}


	for (int i = 0; i < N_BODY; i++)
	{
		rigidBodies[i]->BeginIterateGeometry();

		neGeometry * geom = rigidBodies[i]->GetNextGeometry();


		neV3 scale;
		if (geom->GetBoxSize(scale))
		{
			renderPrimitives[i].SetGraphicBox(scale.X(),scale.Y(),scale.Z());				
		}
		else
		{
			f32 height, diameter;

			if (geom->GetCylinder(diameter, height))
			{	
				renderPrimitives[i].SetGraphicCylinder(diameter/2.0f,height);
			}
			else if (geom->GetSphereDiameter(diameter))
			{
				renderPrimitives[i].SetGraphicSphere(diameter/2.0);
			}
		}

		geom->SetUserData((u32)&renderPrimitives[i]);
	}


	//SetUpRoom
	{

		ground = sim->CreateAnimatedBody();

		neGeometry * geom = ground->AddGeometry();	 

		geom->SetBoxSize(gFloor.boxSize);

		ground->UpdateBoundingInfo();

		ground->SetPos(gFloor.pos);

		groundRender.SetGraphicBox(gFloor.boxSize[0], gFloor.boxSize[1], gFloor.boxSize[2]);

	}

}
Example #6
0
void CCar::MakeCar(neSimulator * sim, neV3 & pos)
{
	f32 mass = 1.0f;

	neRigidBody * rigidBody = sim->CreateRigidBody();

	rigidBody->CollideConnected(true);

	neGeometry * geom = rigidBody->AddGeometry();

	neV3 boxSize;
	{
		// the car consist of two boxes

		boxSize.Set(6.0f, 1.0f, 3.2f);

		geom->SetBoxSize(boxSize);

		neT3 t;

		t.SetIdentity();

		t.pos.Set(0.0f, 0.25f, 0.0f);

		geom->SetTransform(t);

		geom = rigidBody->AddGeometry();

		boxSize.Set(2.5f, 1.0f, 2.8f);

		geom->SetBoxSize(boxSize[0],boxSize[1],boxSize[2]);

		t.pos.Set(-0.6f, 1.0f, 0.0f);

		geom->SetTransform(t);
	}
	{ // add 4 sensors to the rigid body
		neSensor * sn;

		for (s32 si = 0; si < 4; si++)
		{
			sn =rigidBody->AddSensor();

			neV3 snPos, snDir;

			snDir.Set(0.0f, -1.0f, 0.0f);

			snPos.Set(sensorData[si].pos);

			sn->SetLineSensor(snPos, snDir);
		}

		// add a controller to the rigid body

		neRigidBodyController * controller;

		controller = rigidBody->AddController(&cb, 0);
	}

	neV3 tensorSize;

	tensorSize = boxSize;

	rigidBody->UpdateBoundingInfo();

	rigidBody->SetInertiaTensor(neBoxInertiaTensor(tensorSize, mass));

	rigidBody->SetMass(mass);

	rigidBody->SetUserData((u32)this);

	carRigidBody = rigidBody;

	{ // setup the display boxes for the car


		rigidBody->BeginIterateGeometry();

		while (geom = rigidBody->GetNextGeometry())
		{
			neV3 boxSize;

			geom->GetBoxSize(boxSize);

//			CRenderPrimitive * renderPrim = AddRenderPrimitive();

//			renderPrim->SetGraphicBox(boxSize[0], boxSize[1], boxSize[2]);

//			geom->SetUserData((u32)renderPrim);

//			renderPrim->SetDiffuseColor(D3DXCOLOR(0.2f, 0.2f, 0.8f, 1));
		}
	}

//	wheelRenderPrimitive.SetGraphicCylinder(WHEEL_DIAMETER * 0.5f, WHEEL_WIDTH);

	// set the car position

	carRigidBody->SetPos(pos);

	// add bonnet to the car

	MakeParts(sim, pos);
}