-
Notifications
You must be signed in to change notification settings - Fork 830
Open
Description
The PxArticulationLink in the groove does not collide with the PxArticulationLink in the chute to support its movement along the groove path. Here, I set the shape of the edge as a triangle mesh and set the filter shape.setSimulationFilterData(new PxFilterData(0, 0, 1, 0))
;.
static PxFilterFlags scissorFilter( PxFilterObjectAttributes attributes0, PxFilterData filterData0,
PxFilterObjectAttributes attributes1, PxFilterData filterData1,
PxPairFlags& pairFlags, const void* constantBlock, PxU32 constantBlockSize)
{
PX_UNUSED(attributes0);
PX_UNUSED(attributes1);
PX_UNUSED(constantBlock);
PX_UNUSED(constantBlockSize);
if (filterData0.word2 != 0 && filterData0.word2 == filterData1.word2)
return PxFilterFlag::eKILL;
pairFlags |= PxPairFlag::eCONTACT_DEFAULT;
return PxFilterFlag::eDEFAULT;
}
PxArticulationLink baselink = articulationControl.createLink(null,
base.getWorldTransform(), base, gMaterial, 1, true);
PxArticulationLink rotate0Link = articulationControl.createLink(baselink,
rotate0.getWorldTransform(), rotate0, gMaterial, 1,true);
joint = rotate0Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.eFIX);
Transform parentPose = PhysxMathUtil.getRelativeTransform(rotate0, base);
Transform childPose = PhysxMathUtil.getRelativeTransform(rotate0, rotate0);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
PxArticulationLink rotate1Link = articulationControl.createLink(rotate0Link,
rotate1.getWorldTransform(), rotate1, gMaterial, 1,true);
driveJoint = rotate1Link.getInboundJoint();
driveJoint.setJointType(PxArticulationJointTypeEnum.eREVOLUTE);
parentPose = PhysxMathUtil.getRelativeTransform(rotate0, rotate0);
childPose = PhysxMathUtil.getRelativeTransform(rotate0, rotate1);
articulationControl.setJointParentAndChildPose(driveJoint, parentPose, childPose);
driveJoint.setMotion(PxArticulationAxisEnum.eSWING2, PxArticulationMotionEnum.eFREE);
PxArticulationDrive drive = new PxArticulationDrive();
drive.setStiffness(1000f);
drive.setDamping(10f);
drive.setMaxForce(100000.0f);
drive.setDriveType(PxArticulationDriveTypeEnum.eVELOCITY);
driveJoint.setDriveParams(PxArticulationAxisEnum.eSWING2, drive);
PxArticulationLink rotate2Link = articulationControl.createLink(rotate1Link,
rotate2.getWorldTransform(), rotate2, gMaterial, 1,true);
joint = rotate2Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.eREVOLUTE);
parentPose = PhysxMathUtil.getRelativeTransform(rotate1, rotate1);
childPose = PhysxMathUtil.getRelativeTransform(rotate1, rotate2);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
joint.setMotion(PxArticulationAxisEnum.eSWING2, PxArticulationMotionEnum.eFREE);
PxArticulationLink slideX2Link = articulationControl.createLink(rotate2Link,
slideX2.getWorldTransform(), slideX2, gMaterial, 1,true);
joint = slideX2Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.eREVOLUTE);
parentPose = PhysxMathUtil.getRelativeTransform(slideX2, rotate2);
childPose = PhysxMathUtil.getRelativeTransform(slideX2, slideX2);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
joint.setMotion(PxArticulationAxisEnum.eSWING2, PxArticulationMotionEnum.eFREE);
PxArticulationLink slideX1Link = articulationControl.createLink(slideX2Link,
slideX1.getWorldTransform(), slideX1, gMaterial, 1f,true);
joint = slideX1Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.ePRISMATIC);
parentPose = PhysxMathUtil.getRelativeTransform(slideX1, slideX2);
childPose = PhysxMathUtil.getRelativeTransform(slideX1, slideX1);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
joint.setMotion(PxArticulationAxisEnum.eX, PxArticulationMotionEnum.eLIMITED);
joint.setMotion(PxArticulationAxisEnum.eY, PxArticulationMotionEnum.eLOCKED);
joint.setMotion(PxArticulationAxisEnum.eZ, PxArticulationMotionEnum.eLOCKED);
joint.setMotion(PxArticulationAxisEnum.eTWIST, PxArticulationMotionEnum.eLOCKED);
joint.setMotion(PxArticulationAxisEnum.eSWING1, PxArticulationMotionEnum.eLOCKED);
joint.setMotion(PxArticulationAxisEnum.eSWING2, PxArticulationMotionEnum.eLOCKED);
parentPose = PhysxMathUtil.getRelativeTransform(slideX1, base);
childPose = PhysxMathUtil.getRelativeTransform(slideX1, slideX1);
PxD6Joint base_slideX1Joint = PxTopLevelFunctions.D6JointCreate(physxAppState.getPhysics(), baselink,
PhysxMathUtil.updatePxTransform(parentPose, null),
slideX1Link, PhysxMathUtil.updatePxTransform(childPose, null));
base_slideX1Joint.setMotion(PxD6AxisEnum.eX, PxD6MotionEnum.eLIMITED);
base_slideX1Joint.setMotion(PxD6AxisEnum.eY, PxD6MotionEnum.eLOCKED);
base_slideX1Joint.setMotion(PxD6AxisEnum.eZ, PxD6MotionEnum.eLOCKED);
base_slideX1Joint.setMotion(PxD6AxisEnum.eTWIST, PxD6MotionEnum.eLOCKED);
base_slideX1Joint.setMotion(PxD6AxisEnum.eSWING1, PxD6MotionEnum.eLOCKED);
base_slideX1Joint.setMotion(PxD6AxisEnum.eSWING2, PxD6MotionEnum.eLOCKED);
PxArticulationLink baseLink1 = articulationControl.createLink(baselink,
base1.getWorldTransform(), base1, gMaterial, 1f,true);
joint = baseLink1.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.eFIX);
parentPose = PhysxMathUtil.getRelativeTransform(base1, base);
childPose = PhysxMathUtil.getRelativeTransform(base1, base1);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
PxArticulationLink slideY2Link = articulationControl.createLink(baseLink1,
slideY2.getWorldTransform(), slideY2, gMaterial, 1f,true);
joint = slideY2Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.ePRISMATIC);
parentPose = PhysxMathUtil.getRelativeTransform(slideY2, base1);
childPose = PhysxMathUtil.getRelativeTransform(slideY2, slideY2);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
joint.setMotion(PxArticulationAxisEnum.eX, PxArticulationMotionEnum.eLIMITED);
PxArticulationLink slideY1Link = articulationControl.createLink(slideY2Link,
slideY1.getWorldTransform(), slideY1, gMaterial, 1f,true);
joint = slideY1Link.getInboundJoint();
joint.setJointType(PxArticulationJointTypeEnum.eFIX);
parentPose = PhysxMathUtil.getRelativeTransform(slideY1, slideY2);
childPose = PhysxMathUtil.getRelativeTransform(slideY1, slideY1);
articulationControl.setJointParentAndChildPose(joint, parentPose, childPose);
20250827_172950.mp4
Metadata
Metadata
Assignees
Labels
No labels