private bool CanBeHeld(SceneObject obj, out float distance) { distance = 0; if (!obj.Holdable) { return(false); } var cursorPos = GlobalMatrix.Multiply(Vector3.Zero.ToVector4()).ToVector3(); var objPos = obj.GlobalMatrix.Multiply(Vector3.Zero.ToVector4()).ToVector3(); distance = Vector3.Distance(cursorPos, objPos); return(distance <= Tolerance); }
public Vector3 Evaluate(Vector2 hw) { var angleH = 2.0 * Math.PI * hw.X; var angleW = 2.0 * Math.PI * hw.Y; var a = LargeRadius + SmallRadius * Math.Cos(angleW); float x = (float)(a * Math.Cos(angleH)); float y = (float)(a * Math.Sin(angleH)); float z = (float)(SmallRadius * Math.Sin(angleW)); var localPos = new Vector4(x, y, z, 1); var globalPos = GlobalMatrix.Multiply(localPos); return(globalPos.ToVector3()); }
public Vector3 EvaluateDV(Vector2 hw) { var angleH = 2.0 * Math.PI * hw.X; var angleW = 2.0 * Math.PI * hw.Y; var aDrv = SmallRadius * -Math.Sin(angleW) * 2.0 * Math.PI; float x = (float)(aDrv * Math.Cos(angleH)); float y = (float)(aDrv * Math.Sin(angleH)); float z = (float)(SmallRadius * Math.Cos(angleW) * 2.0 * Math.PI); var localDrv = new Vector4(x, y, z, 0); var globalDrv = GlobalMatrix.Multiply(localDrv); return(globalDrv.ToVector3()); }