I updated, but it didn't fix the problem. Here's my joint setup.
Code: Select all
// zeroAxis is -Vector3.UnitX, rotationAxis is Vector3.UnitY, angle is pi, rotateTime is 2
baseJoint = new RevoluteJoint(null, modelList[0].Ent, center, rotationAxis);
baseJoint.Motor.IsActive = true;
baseJoint.Motor.Settings.Mode = BEPUphysics.Constraints.TwoEntity.Motors.MotorMode.Servomechanism;
baseJoint.Motor.Settings.Servo.SpringSettings.StiffnessConstant = 0;
baseJoint.Motor.Settings.Servo.SpringSettings.DampingConstant /= 12;
baseJoint.Motor.Settings.Servo.Goal = 0;
baseJoint.Motor.Settings.Servo.MaxCorrectiveVelocity = angle / rotateTime;
baseJoint.Motor.Settings.Servo.BaseCorrectiveSpeed = angle / rotateTime;
baseJoint.Motor.Basis.SetWorldAxes(rotationAxis, zeroAxis);
baseJoint.Motor.TestAxis = zeroAxis;
baseJoint.Limit.IsActive = true;
baseJoint.Limit.MinimumAngle = 0;
baseJoint.Limit.MaximumAngle = angle;
baseJoint.Limit.Basis.SetWorldAxes(rotationAxis, zeroAxis);
baseJoint.Limit.TestAxis = zeroAxis;
EDIT: Also, could a LineSliderJoint be used to create a kind of belt-like object, like this, in which the axis of rotation is not the same as the axis of sliding?