void SetupAttachmentScene() { sprintf(gTitleString, "Attachment Demo"); // Create objects in scene groundPlane = CreateGroundPlane(); NxActor* box1 = CreateBox(NxVec3(-7,12.25,0), NxVec3(2.5,1,1), 0); NxActor* box2 = CreateBox(NxVec3(0,12.25,0), NxVec3(2.5,1,1), 0); NxActor* box3 = CreateBox(NxVec3(7,12.25,0), NxVec3(2.5,1,1), 0); NxActor* attachedBox = CreateBox(NxVec3(-7.2,4.5,1.6), NxVec3(1.25,1,1), 1); NxActor* attachedSphere = CreateSphere(NxVec3(-0.25,4.0,2.0), 1.3, 1); NxActor* attachedCapsule = CreateCapsule(NxVec3(9.0,5.5,2.0),2.0, 1, 1); NxReal damping = 0.3; attachedBox->setAngularDamping(damping); attachedBox->setLinearDamping(damping); attachedSphere->setAngularDamping(damping); attachedSphere->setLinearDamping(damping); attachedCapsule->setAngularDamping(damping); attachedCapsule->setLinearDamping(damping); NxQuat q; q.fromAngleAxis(90,NxVec3(0,0,1)); attachedCapsule->setGlobalOrientationQuat(q); // Cloth NxClothDesc clothDesc; clothDesc.globalPose.M.rotX(1.3); clothDesc.thickness = 0.3; clothDesc.attachmentResponseCoefficient = 1; clothDesc.flags |= NX_CLF_BENDING; clothDesc.flags |= NX_CLF_BENDING_ORTHO; clothDesc.flags |= NX_CLF_DAMPING | NX_CLF_VISUALIZATION; if (gHardwareCloth) clothDesc.flags |= NX_CLF_HARDWARE; // Cloth attaching to sphere clothDesc.globalPose.t = NxVec3(0.75,5,2); MyCloth* regularCloth1 = new MyCloth(gScene, clothDesc, 2, 8, 0.4); regularCloth1->getNxCloth()->attachToCollidingShapes(NX_CLOTH_ATTACHMENT_TWOWAY); gCloths.push_back(regularCloth1); // Cloth attaching to box clothDesc.globalPose.t = NxVec3(-6.2,5,2); MyCloth* regularCloth2 = new MyCloth(gScene, clothDesc, 2, 8, 0.4); regularCloth2->getNxCloth()->attachToCollidingShapes(NX_CLOTH_ATTACHMENT_TWOWAY); gCloths.push_back(regularCloth2); // Cloth attaching to capsule clothDesc.globalPose.t = NxVec3(8.0,5,2); clothDesc.attachmentTearFactor = 2.0; MyCloth* regularCloth3 = new MyCloth(gScene, clothDesc, 2, 8, 0.4); regularCloth3->getNxCloth()->attachToShape(box3->getShapes()[0], NX_CLOTH_ATTACHMENT_TEARABLE); regularCloth3->getNxCloth()->attachToShape(attachedCapsule->getShapes()[0], NX_CLOTH_ATTACHMENT_TWOWAY); gCloths.push_back(regularCloth3); }
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; }