protected override Body[] OnVolumeCast(Capsule capsule, int contactGroup) { Vec3 center; capsule.GetCenter(out center); float length = capsule.GetLength(); Vec3 direction; capsule.GetDirection(out direction); dGeomID volumeCastGeomID = Ode.dCreateCapsule(rootSpaceID, capsule.Radius, length); Quat rotation = Quat.FromDirectionZAxisUp(direction); Mat3 rot; rotation.ToMat3(out rot); Mat3 rotationMat; Mat3.FromRotateByY(MathFunctions.PI / 2, out rotationMat); Mat3 mat3; Mat3.Multiply(ref rot, ref rotationMat, out mat3); Ode.dMatrix3 odeMat3; Convert.ToODE(ref mat3, out odeMat3); Ode.dGeomSetRotation(volumeCastGeomID, ref odeMat3); Ode.dGeomSetPosition(volumeCastGeomID, center.X, center.Y, center.Z); Body[] result = DoVolumeCastGeneral(volumeCastGeomID, contactGroup); Ode.dGeomDestroy(volumeCastGeomID); return(result); }