NxActor* CreateBoard(const NxVec3& pos) { NxActor* actor = CreateBox(pos + NxVec3(0,0.5,0), NxVec3(1,0.25,0.5), 10); actor->raiseBodyFlag(NX_BF_FROZEN_ROT_X); actor->setAngularDamping(0.5); // Left wheel NxWheelDesc wheelDesc; //wheelDesc.wheelAxis.set(0,0,1); //wheelDesc.downAxis.set(0,-1,0); wheelDesc.wheelApproximation = 10; wheelDesc.wheelRadius = 0.5; wheelDesc.wheelWidth = 0.1; wheelDesc.wheelSuspension = 0.5; // wheelDesc.wheelSuspension = 1.0; wheelDesc.springRestitution = 7000; wheelDesc.springDamping = 0; wheelDesc.springBias = 0; // wheelDesc.springRestitution = 20; // wheelDesc.springDamping = 0.5; // wheelDesc.springBias = 0; wheelDesc.maxBrakeForce = 1; wheelDesc.frictionToFront = 0.1; wheelDesc.frictionToSide = 0.99; wheelDesc.position = NxVec3(1.5,0.5,0); wheelDesc.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheel1 = AddWheelToActor(actor, &wheelDesc); // Right wheel NxWheelDesc wheelDesc2; //wheelDesc2.wheelAxis.set(0,0,1); //wheelDesc2.downAxis.set(0,-1,0); wheelDesc2.wheelApproximation = 10; wheelDesc2.wheelRadius = 0.5; wheelDesc2.wheelWidth = 0.1; wheelDesc2.wheelSuspension = 0.5; // wheelDesc2.wheelSuspension = 1.0; wheelDesc2.springRestitution = 7000; wheelDesc2.springDamping = 0; wheelDesc2.springBias = 0; // wheelDesc2.springRestitution = 20; // wheelDesc2.springDamping = 0.5; // wheelDesc2.springBias = 0; wheelDesc2.maxBrakeForce = 1; wheelDesc2.frictionToFront = 0.1; wheelDesc2.frictionToSide = 0.99; wheelDesc2.position = NxVec3(-1.5,0.5,0); wheelDesc2.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheel2 = AddWheelToActor(actor, &wheelDesc2); return actor; }
VehicleController::VehicleController(Vec3 pos, VehicleEngine* vehEngine, VehicleParams *vehParams, VehicleParamsEx *vehParamsEx, bool steerableWheelsFront) { m_forward = Vec3(0, 0, 0); m_scene = core.dynamics->getScene(); m_vehiclePose = new VehiclePose; m_vehicleParams = vehParams; m_vehicleParamsEx = vehParamsEx; m_vehicleEngine = vehEngine; m_actor = NULL; m_wheelFrontLeft = NULL; m_wheelFrontRight = NULL; m_wheelRearLeft = NULL; m_wheelRearRight = NULL; m_poseGiven = false; m_setCurrentSteerAngle = false; m_setCurrentMotorTorque = false; m_setCurrentBrakeTorque = false; m_currentSteerAngle = 0.0f; m_currentMotorTorque = 0.0f; m_currentBrakeTorque = 0.0f; m_steerableWheelsFront = steerableWheelsFront; switch(m_vehicleParams->wheelDriveType) { case 0: m_wheelDriveType = WDT_2WD; break; case 1: m_wheelDriveType = WDT_4WD; break; case 2: m_wheelDriveType = WDT_FWD; break; default: m_wheelDriveType = WDT_2WD; } D3DXMatrixIdentity(&m_vehiclePose->matChassis); D3DXMatrixIdentity(&m_vehiclePose->matFrontLeftWheel); D3DXMatrixIdentity(&m_vehiclePose->matFrontRightWheel); D3DXMatrixIdentity(&m_vehiclePose->matRearLeftWheel); D3DXMatrixIdentity(&m_vehiclePose->matRearRightWheel); m_actor = core.dynamics->createBox(NxVec3(pos), NxVec3(m_vehicleParams->chassisDimm), m_vehicleParams->chassisDensity); SetActorCollisionGroup(m_actor, GROUP_COLLIDABLE_NON_PUSHABLE); //Wheel material globals NxMaterial* wsm = NULL; NxTireFunctionDesc lngTFD; lngTFD.extremumSlip = 1.0f; lngTFD.extremumValue = 0.02f; lngTFD.asymptoteSlip = 2.0f; lngTFD.asymptoteValue = 0.01f; lngTFD.stiffnessFactor = 100.0f; NxTireFunctionDesc latTFD; latTFD.extremumSlip = 1.0f; latTFD.extremumValue = 0.02f; latTFD.asymptoteSlip = 2.0f; latTFD.asymptoteValue = 0.01f; latTFD.stiffnessFactor = 100.0f; NxTireFunctionDesc slipTFD; slipTFD.extremumSlip = 1.0f; slipTFD.extremumValue = 0.02f; slipTFD.asymptoteSlip = 2.0f; slipTFD.asymptoteValue = 0.01f; slipTFD.stiffnessFactor = 100.0f; NxTireFunctionDesc medTFD; medTFD.extremumSlip = 1.0f; medTFD.extremumValue = 0.02f; medTFD.asymptoteSlip = 2.0f; medTFD.asymptoteValue = 0.01f; medTFD.stiffnessFactor = 100.0f; // Front left wheel NxWheelDesc wheelDesc; wheelDesc.frictionToFront = 3.0f; wheelDesc.frictionToSide = 3.0f; /*wheelDesc4.wheelSuspension = wheelDesc3.wheelSuspension = wheelDesc2.wheelSuspension = wheelDesc.wheelSuspension = 0.0001; wheelDesc4.springRestitution = wheelDesc3.springRestitution = wheelDesc2.springRestitution = wheelDesc.springRestitution = 0.0001; wheelDesc4.springDamping = wheelDesc3.springDamping = wheelDesc2.springDamping = wheelDesc.springDamping = 0.001; wheelDesc4.springBias = wheelDesc3.springBias = wheelDesc2.springBias = wheelDesc.springBias = 0.001; wheelDesc4.maxBrakeForce = wheelDesc3.maxBrakeForce = wheelDesc2.maxBrakeForce = wheelDesc.maxBrakeForce = 0.01;*/ if(!m_vehicleParamsEx) { wheelDesc.wheelSuspension = 0.05f; wheelDesc.springRestitution = 1000.0f; wheelDesc.springDamping = 0.5f / 10000000000000; wheelDesc.springBias = 1.0f / 10000000000000; wheelDesc.maxBrakeForce = 0.01f; // 100; /* wheelDesc4.wheelSuspension = wheelDesc3.wheelSuspension = wheelDesc2.wheelSuspension = wheelDesc.wheelSuspension = 0.5f; wheelDesc4.springRestitution = wheelDesc3.springRestitution = wheelDesc2.springRestitution = wheelDesc.springRestitution = 1000.0f; wheelDesc4.springDamping = wheelDesc3.springDamping = wheelDesc2.springDamping = wheelDesc.springDamping = 0.5f / 1; wheelDesc4.springBias = wheelDesc3.springBias = wheelDesc2.springBias = wheelDesc.springBias = 1.0f / 100000; wheelDesc4.maxBrakeForce = wheelDesc3.maxBrakeForce = wheelDesc2.maxBrakeForce = wheelDesc.maxBrakeForce = 0.01f; // 100;*/ } else { wheelDesc.frictionToFront = m_vehicleParamsEx->frictionToFront; wheelDesc.frictionToSide = m_vehicleParamsEx->frictionToSide; wheelDesc.wheelSuspension = m_vehicleParamsEx->wheelSuspension; wheelDesc.springRestitution = m_vehicleParamsEx->springRestitution; wheelDesc.springDamping = m_vehicleParamsEx->springDamping; wheelDesc.springBias = m_vehicleParamsEx->springBias; wheelDesc.maxBrakeForce = m_vehicleParamsEx->maxBrakeForce; // 100; } wheelDesc.wheelApproximation = 0; wheelDesc.wheelRadius = m_vehicleParams->frontWheelsRadius; wheelDesc.wheelWidth = m_vehicleParams->frontWheelsWidth; // 0.1 wheelDesc.position = NxVec3(m_vehicleParams->posFrontLeftWheel); wheelDesc.wheelFlags = NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_STEERABLE_INPUT | NX_WF_CLAMPED_FRICTION; // Front right wheel NxWheelDesc wheelDesc2 = wheelDesc; wheelDesc2.wheelRadius = m_vehicleParams->frontWheelsRadius; wheelDesc2.wheelWidth = m_vehicleParams->frontWheelsWidth; // 0.1 wheelDesc2.position = NxVec3(m_vehicleParams->posFrontRightWheel); // Rear left wheel NxWheelDesc wheelDesc3 = wheelDesc; wheelDesc3.wheelRadius = m_vehicleParams->rearWheelsRadius; wheelDesc3.wheelWidth = m_vehicleParams->rearWheelsWidth; // 0.1 wheelDesc3.position = NxVec3(m_vehicleParams->posRearLeftWheel); // Rear right wheel NxWheelDesc wheelDesc4 = wheelDesc; wheelDesc4.wheelRadius = m_vehicleParams->rearWheelsRadius; wheelDesc4.wheelWidth = m_vehicleParams->rearWheelsWidth; // 0.1 wheelDesc4.position = NxVec3(m_vehicleParams->posRearRightWheel); m_wheelFrontLeft = AddWheelToActor(m_actor, &wheelDesc); m_wheelFrontRight = AddWheelToActor(m_actor, &wheelDesc2); m_wheelRearLeft = AddWheelToActor(m_actor, &wheelDesc3); m_wheelRearRight = AddWheelToActor(m_actor, &wheelDesc4); m_wheelFrontLeft->userData = (void*)new ShapeUserData; m_wheelFrontRight->userData = (void*)new ShapeUserData; m_wheelRearLeft->userData = (void*)new ShapeUserData; m_wheelRearRight->userData = (void*)new ShapeUserData; ((ShapeUserData*)m_wheelFrontLeft->userData)->vehicleActor = m_actor; ((ShapeUserData*)m_wheelFrontRight->userData)->vehicleActor = m_actor; ((ShapeUserData*)m_wheelRearLeft->userData)->vehicleActor = m_actor; ((ShapeUserData*)m_wheelRearRight->userData)->vehicleActor = m_actor; m_wheelFrontLeft->setWheelFlags(m_wheelFrontLeft->getWheelFlags() | NX_WF_INPUT_LAT_SLIPVELOCITY ); m_wheelFrontRight->setWheelFlags(m_wheelFrontRight->getWheelFlags() | NX_WF_INPUT_LAT_SLIPVELOCITY ); m_wheelRearLeft->setWheelFlags(m_wheelRearLeft->getWheelFlags() | NX_WF_INPUT_LAT_SLIPVELOCITY ); m_wheelRearRight->setWheelFlags(m_wheelRearRight->getWheelFlags() | NX_WF_INPUT_LAT_SLIPVELOCITY ); // LOWER THE CENTER OF MASS NxVec3 massPos = m_actor->getCMassLocalPosition(); massPos.y = m_vehicleParams->posFrontLeftWheel.y - m_vehicleParams->frontWheelsRadius; m_actor->setCMassOffsetLocalPosition(massPos); m_actor->wakeUp(1e30); //stopMotorAndBreak(); }
NxActor* CreateTrike(const NxVec3& pos) { NxActor* actor = CreateBox(pos + NxVec3(0,0.5,0), NxVec3(2,0.25,0.75), 10); NxTireFunctionDesc lngTFD; lngTFD.extremumSlip = 1.0f; lngTFD.extremumValue = 0.02f; lngTFD.asymptoteSlip = 2.0f; lngTFD.asymptoteValue = 0.01f; lngTFD.stiffnessFactor = 1000000.0f; NxTireFunctionDesc latTFD; latTFD.extremumSlip = 1.0f; latTFD.extremumValue = 0.02f; latTFD.asymptoteSlip = 2.0f; latTFD.asymptoteValue = 0.01f; latTFD.stiffnessFactor = 1000000.0f; NxTireFunctionDesc slipTFD; slipTFD.extremumSlip = 1.0f; slipTFD.extremumValue = 0.02f; slipTFD.asymptoteSlip = 2.0f; slipTFD.asymptoteValue = 0.01f; slipTFD.stiffnessFactor = 100.0f; // Front wheel NxWheelDesc wheelDesc; wheelDesc.wheelApproximation = 10; wheelDesc.wheelRadius = 0.5; wheelDesc.wheelWidth = 0.3; // 0.1 wheelDesc.wheelSuspension = 1.0; wheelDesc.springRestitution = 100; wheelDesc.springDamping = 0.5; wheelDesc.springBias = 0; wheelDesc.maxBrakeForce = 1; wheelDesc.position = NxVec3(2.5,0.5,0); wheelDesc.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheel1 = AddWheelToActor(actor, &wheelDesc); // Rear left wheel NxWheelDesc wheelDesc2; wheelDesc2.wheelApproximation = 10; wheelDesc2.wheelRadius = 0.5; wheelDesc2.wheelWidth = 0.3; // 0.1 wheelDesc2.wheelSuspension = 1.0; wheelDesc2.springRestitution = 100; wheelDesc2.springDamping = 0.5; wheelDesc2.springBias = 0; wheelDesc2.maxBrakeForce = 1; wheelDesc2.position = NxVec3(-1.5,0.5,-1); wheelDesc2.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheel2 = AddWheelToActor(actor, &wheelDesc2); // Rear right wheel NxWheelDesc wheelDesc3; wheelDesc3.wheelApproximation = 10; wheelDesc3.wheelRadius = 0.5; wheelDesc3.wheelWidth = 0.3; // 0.1 wheelDesc3.wheelSuspension = 1.0; wheelDesc3.springRestitution = 100; wheelDesc3.springDamping = 0.5; wheelDesc3.springBias = 0; wheelDesc3.maxBrakeForce = 1; wheelDesc3.position = NxVec3(-1.5,0.5,1); wheelDesc3.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheel3 = AddWheelToActor(actor, &wheelDesc3); // LOWER THE CENTER OF MASS NxVec3 massPos = actor->getCMassLocalPosition(); massPos.y -= 1; actor->setCMassOffsetLocalPosition(massPos); return actor; }
Tractor::Tractor(Dynamics *dyn, NxVec3 pos, string fname) { m_vehicleDimms = new VehicleDimms; //VehicleDimms *vd = new VehicleDimms; VehicleParamsEx *vp = new VehicleParamsEx; vector<CfgVariable*> vars; vars = *m_vehicleDimms->getVariableList(); for(int i = 0; i < vp->getVariableList()->size(); i++) { vars.push_back((*vp->getVariableList())[i]); } Vec3 rotateFrontLeftWheel; Vec3 rotateFrontRightWheel; Vec3 rotateRearLeftWheel; Vec3 rotateRearRightWheel; Vec3 rotateChassis; string paramsType; string wheelFrontLeftModel; string wheelFrontRightModel; string wheelRearLeftModel; string wheelRearRightModel; string chassisModel; vars.push_back(new CfgVariable(V_VEC3, &rotateFrontLeftWheel, getVarName(rotateFrontLeftWheel))); vars.push_back(new CfgVariable(V_VEC3, &rotateFrontRightWheel, getVarName(rotateFrontRightWheel))); vars.push_back(new CfgVariable(V_VEC3, &rotateRearLeftWheel, getVarName(rotateRearLeftWheel))); vars.push_back(new CfgVariable(V_VEC3, &rotateRearRightWheel, getVarName(rotateRearRightWheel))); vars.push_back(new CfgVariable(V_VEC3, &rotateChassis, getVarName(rotateChassis))); vars.push_back(new CfgVariable(V_STRING, ¶msType, getVarName(paramsType))); vars.push_back(new CfgVariable(V_STRING, &wheelFrontLeftModel, getVarName(wheelFrontLeftModel))); vars.push_back(new CfgVariable(V_STRING, &wheelFrontRightModel, getVarName(wheelFrontRightModel))); vars.push_back(new CfgVariable(V_STRING, &wheelRearLeftModel, getVarName(wheelRearLeftModel))); vars.push_back(new CfgVariable(V_STRING, &wheelRearRightModel, getVarName(wheelRearRightModel))); vars.push_back(new CfgVariable(V_STRING, &chassisModel, getVarName(chassisModel))); CfgLoader cfg(fname, &vars); D3DXMatrixRotationYawPitchRoll(&m_vehicleDimms->matFrontLeftWheelRotation, rotateFrontLeftWheel.y, rotateFrontLeftWheel.x, rotateFrontLeftWheel.z); D3DXMatrixRotationYawPitchRoll(&m_vehicleDimms->matFrontRightWheelRotation, rotateFrontRightWheel.y, rotateFrontRightWheel.x, rotateFrontRightWheel.z); D3DXMatrixRotationYawPitchRoll(&m_vehicleDimms->matRearLeftWheelRotation, rotateRearLeftWheel.y, rotateRearLeftWheel.x, rotateRearLeftWheel.z); D3DXMatrixRotationYawPitchRoll(&m_vehicleDimms->matRearRightWheelRotation, rotateRearRightWheel.y, rotateRearRightWheel.x, rotateRearRightWheel.z); D3DXMatrixRotationYawPitchRoll(&m_vehicleDimms->matChassisRotation, rotateChassis.y, rotateChassis.x, rotateChassis.z); m_objChassis = new RendObj(chassisModel, new Material("wood.jpg", "", ""), Vec3(0, 0, 0)); m_objFrontLeftWheel = new RendObj(wheelFrontLeftModel, new Material("wood.jpg", "", ""), Vec3(0, 0, 0)); m_objFrontRightWheel = new RendObj(wheelFrontRightModel, new Material("wood.jpg", "", ""), Vec3(0, 0, 0)); m_objRearLeftWheel = new RendObj(wheelRearLeftModel, new Material("wood.jpg", "", ""), Vec3(0, 0, 0)); m_objRearRightWheel = new RendObj(wheelRearRightModel, new Material("wood.jpg", "", ""), Vec3(0, 0, 0)); core.game->getWorld()->addToWorld(m_objChassis, NO_COLLISION, 0, GROUP_NON_COLLIDABLE); core.game->getWorld()->addToWorld(m_objFrontLeftWheel, NO_COLLISION, 0, GROUP_NON_COLLIDABLE); core.game->getWorld()->addToWorld(m_objFrontRightWheel, NO_COLLISION, 0, GROUP_NON_COLLIDABLE); core.game->getWorld()->addToWorld(m_objRearLeftWheel, NO_COLLISION, 0, GROUP_NON_COLLIDABLE); core.game->getWorld()->addToWorld(m_objRearRightWheel, NO_COLLISION, 0, GROUP_NON_COLLIDABLE); m_vehicleDimms->chassisDimm = Vec3(m_objChassis->getPose()->boundingBox.getWidth()/2, m_objChassis->getPose()->boundingBox.getHeight()/6, m_objChassis->getPose()->boundingBox.getDepth()/2); stopMotorAndBreak(); m_jointPoint = m_vehicleDimms->jointPoint; m_joinedTrailer = NULL; m_joint = NULL; m_oldPos = Vec3(0, 0, 0); m_forward = Vec3(1, 0, 0); m_poseGiven = false; m_scene = dyn->getScene(); m_setCurrentSteerAngle = false; m_setCurrentMotorTorque = false; m_setCurrentBrakeTorque = false; m_currentSteerAngle = 0; m_currentMotorTorque = 0; m_currentBrakeTorque = 0; m_vehiclePose = new VehiclePose; m_joint = NULL; m_joinedTrailer = NULL; D3DXMatrixIdentity(&m_vehiclePose->matChassis); D3DXMatrixIdentity(&m_vehiclePose->matFrontLeftWheel); D3DXMatrixIdentity(&m_vehiclePose->matFrontRightWheel); D3DXMatrixIdentity(&m_vehiclePose->matRearLeftWheel); D3DXMatrixIdentity(&m_vehiclePose->matRearRightWheel); //m_actor = dyn->createBox(pos + NxVec3(0,0.5,0), NxVec3(2,0.25,1), 10); m_actor = dyn->createBox(pos + NxVec3(0,0.5,0), NxVec3(m_vehicleDimms->chassisDimm), m_vehicleDimms->chassisDensity); SetActorCollisionGroup(m_actor, GROUP_COLLIDABLE_NON_PUSHABLE); //m_actor = dyn->createBox(pos + NxVec3(0,0.5,0), NxVec3(2,0.25,1), dimm->chassisDensity); // Wheel material globals NxMaterial* wsm = NULL; NxTireFunctionDesc lngTFD; lngTFD.extremumSlip = 1.0f; lngTFD.extremumValue = 0.02f; lngTFD.asymptoteSlip = 2.0f; lngTFD.asymptoteValue = 0.01f; lngTFD.stiffnessFactor = 1000000.0f; NxTireFunctionDesc latTFD; latTFD.extremumSlip = 1.0f; latTFD.extremumValue = 0.02f; latTFD.asymptoteSlip = 2.0f; latTFD.asymptoteValue = 0.01f; latTFD.stiffnessFactor = 1000000.0f; NxTireFunctionDesc slipTFD; slipTFD.extremumSlip = 1.0f; slipTFD.extremumValue = 0.02f; slipTFD.asymptoteSlip = 2.0f; slipTFD.asymptoteValue = 0.01f; slipTFD.stiffnessFactor = 100.0f; NxTireFunctionDesc medTFD; medTFD.extremumSlip = 1.0f; medTFD.extremumValue = 0.02f; medTFD.asymptoteSlip = 2.0f; medTFD.asymptoteValue = 0.01f; medTFD.stiffnessFactor = 10000.0f; // Front left wheel NxWheelDesc wheelDesc; wheelDesc.frictionToFront = 100.0f; wheelDesc.frictionToSide = 1.0f; wheelDesc.wheelApproximation = 0; wheelDesc.wheelRadius = m_vehicleDimms->frontWheelsRadius; wheelDesc.wheelWidth = m_vehicleDimms->frontWheelsWidth; // 0.1 wheelDesc.wheelSuspension = 10; wheelDesc.springRestitution = 0.1; wheelDesc.springDamping = 10; wheelDesc.springBias = 10; wheelDesc.maxBrakeForce = 0.01; wheelDesc.position = NxVec3(m_vehicleDimms->posFrontLeftWheel); wheelDesc.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; // Front right wheel NxWheelDesc wheelDesc2; wheelDesc2.frictionToFront = 100.0f; wheelDesc2.frictionToSide = 1.0f; wheelDesc2.wheelApproximation = 0; wheelDesc2.wheelRadius = m_vehicleDimms->frontWheelsRadius; wheelDesc2.wheelWidth = m_vehicleDimms->frontWheelsWidth; // 0.1 wheelDesc2.wheelSuspension = 10; wheelDesc2.springRestitution = 0.1; wheelDesc2.springDamping = 10; wheelDesc2.springBias = 10; wheelDesc.maxBrakeForce = 0.01; wheelDesc2.position = NxVec3(m_vehicleDimms->posFrontRightWheel); wheelDesc2.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; // Rear left wheel NxWheelDesc wheelDesc3; wheelDesc3.frictionToFront = 100.0f; wheelDesc3.frictionToSide = 1.0f; wheelDesc3.wheelApproximation = 0; wheelDesc3.wheelRadius = m_vehicleDimms->rearWheelsRadius; wheelDesc3.wheelWidth = m_vehicleDimms->rearWheelsWidth; // 0.1 wheelDesc3.wheelSuspension = 10; wheelDesc3.springRestitution = 0.1; wheelDesc3.springDamping = 10; wheelDesc3.springBias = 10; wheelDesc3.maxBrakeForce = 0.01; wheelDesc3.position = NxVec3(m_vehicleDimms->posRearLeftWheel); wheelDesc3.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; // Rear right wheel NxWheelDesc wheelDesc4; wheelDesc4.frictionToFront = 100.0f; wheelDesc4.frictionToSide = 1.0f; wheelDesc4.wheelApproximation = 0; wheelDesc4.wheelRadius = m_vehicleDimms->rearWheelsRadius; wheelDesc4.wheelWidth = m_vehicleDimms->rearWheelsWidth; // 0.1 wheelDesc4.wheelSuspension = 10; wheelDesc4.springRestitution = 0.1; wheelDesc4.springDamping = 10; wheelDesc4.springBias = 10; wheelDesc4.maxBrakeForce = 0.01; wheelDesc4.position = NxVec3(m_vehicleDimms->posRearRightWheel); wheelDesc4.wheelFlags = NX_WF_USE_WHEELSHAPE | NX_WF_BUILD_LOWER_HALF | NX_WF_ACCELERATED | NX_WF_AFFECTED_BY_HANDBRAKE | NX_WF_STEERABLE_INPUT; wheelDesc4.frictionToFront = wheelDesc3.frictionToFront = wheelDesc2.frictionToFront = wheelDesc.frictionToFront = 100.0f; wheelDesc4.frictionToSide = wheelDesc3.frictionToSide = wheelDesc2.frictionToSide = wheelDesc.frictionToSide = 1.0f; /*wheelDesc4.wheelSuspension = wheelDesc3.wheelSuspension = wheelDesc2.wheelSuspension = wheelDesc.wheelSuspension = 0.0001; wheelDesc4.springRestitution = wheelDesc3.springRestitution = wheelDesc2.springRestitution = wheelDesc.springRestitution = 0.0001; wheelDesc4.springDamping = wheelDesc3.springDamping = wheelDesc2.springDamping = wheelDesc.springDamping = 0.001; wheelDesc4.springBias = wheelDesc3.springBias = wheelDesc2.springBias = wheelDesc.springBias = 0.001; wheelDesc4.maxBrakeForce = wheelDesc3.maxBrakeForce = wheelDesc2.maxBrakeForce = wheelDesc.maxBrakeForce = 0.01;*/ if(paramsType != "Extended") { wheelDesc4.wheelSuspension = wheelDesc3.wheelSuspension = wheelDesc2.wheelSuspension = wheelDesc.wheelSuspension = 0.5f / 10; wheelDesc4.springRestitution = wheelDesc3.springRestitution = wheelDesc2.springRestitution = wheelDesc.springRestitution = 1000.0f / 100000000000; wheelDesc4.springDamping = wheelDesc3.springDamping = wheelDesc2.springDamping = wheelDesc.springDamping = 0.5f / 10000000000000; wheelDesc4.springBias = wheelDesc3.springBias = wheelDesc2.springBias = wheelDesc.springBias = 1.0f / 10000000000000; wheelDesc4.maxBrakeForce = wheelDesc3.maxBrakeForce = wheelDesc2.maxBrakeForce = wheelDesc.maxBrakeForce = 0.01f; // 100; } else { wheelDesc4.frictionToFront = wheelDesc3.frictionToFront = wheelDesc2.frictionToFront = wheelDesc.frictionToFront = vp->frictionToFront; wheelDesc4.frictionToSide = wheelDesc3.frictionToSide = wheelDesc2.frictionToSide = wheelDesc.frictionToSide = vp->frictionToSide; wheelDesc4.wheelSuspension = wheelDesc3.wheelSuspension = wheelDesc2.wheelSuspension = wheelDesc.wheelSuspension = vp->wheelSuspension; wheelDesc4.springRestitution = wheelDesc3.springRestitution = wheelDesc2.springRestitution = wheelDesc.springRestitution = vp->springRestitution; wheelDesc4.springDamping = wheelDesc3.springDamping = wheelDesc2.springDamping = wheelDesc.springDamping = vp->springDamping; wheelDesc4.springBias = wheelDesc3.springBias = wheelDesc2.springBias = wheelDesc.springBias = vp->springBias; wheelDesc4.maxBrakeForce = wheelDesc3.maxBrakeForce = wheelDesc2.maxBrakeForce = wheelDesc.maxBrakeForce = vp->maxBrakeForce; // 100; } m_wheelFrontLeft = AddWheelToActor(m_actor, &wheelDesc); m_wheelFrontRight = AddWheelToActor(m_actor, &wheelDesc2); m_wheelRearLeft = AddWheelToActor(m_actor, &wheelDesc3); m_wheelRearRight = AddWheelToActor(m_actor, &wheelDesc4); m_wheelFrontLeft->userData = (void*)new ShapeUserData; m_wheelFrontRight->userData = (void*)new ShapeUserData; m_wheelRearLeft->userData = (void*)new ShapeUserData; m_wheelRearRight->userData = (void*)new ShapeUserData; // LOWER THE CENTER OF MASS NxVec3 massPos = m_actor->getCMassLocalPosition(); massPos.y -= 1; m_actor->setCMassOffsetLocalPosition(massPos); m_actor->wakeUp(1e30); }