private static CollisionWorld.ClosestRayResultCallback SetupCallback( CollisionManager collision, Camera viewportCamera, System.Windows.Forms.MouseEventArgs e) { var mouse = new { Near = viewportCamera.Project(new Vector2(e.X, e.Y), depth: -1), Far = viewportCamera.Project(new Vector2(e.X, e.Y), depth: 1) }; var callback = new CollisionWorld.ClosestRayResultCallback( mouse.Near, mouse.Far); callback.Flags = (uint)BulletSharp.InternalEdgeAdjustFlags.TriangleConvexBackfaceMode; collision.World.RayTest(mouse.Near, mouse.Far, callback); return(callback); }
private static CollisionWorld.ClosestRayResultCallback SetupAllRayCallback( CollisionManager collision, Camera viewportCamera, System.Windows.Forms.MouseEventArgs e) { var mouse = new { Near = viewportCamera.Project(new Vector2(e.X, e.Y), depth: -1), Far = viewportCamera.Project(new Vector2(e.X, e.Y), depth: 1) }; var callback = new CollisionWorld.ClosestRayResultCallback( mouse.Near, mouse.Far); callback.CollisionFilterGroup = CollisionFilterGroups.StaticFilter; callback.CollisionFilterMask = CollisionFilterGroups.StaticFilter; collision.World.RayTest(mouse.Near, mouse.Far, callback); return(callback); }
public void OnMouseMove(CollisionManager CollisionManager, Camera ActiveCamera, System.Windows.Forms.MouseEventArgs e) { var mouse = new { Near = ActiveCamera.Project(new Vector2(e.X, e.Y), depth: -0.90f), Far = ActiveCamera.Project(new Vector2(e.X, e.Y), depth: 1) }; Matrix4 from = Matrix4.Translation(mouse.Near); Matrix4 to = Matrix4.Translation(mouse.Far); var d = (mouse.Far - mouse.Near).Normalized(); using (var callback = new CollisionWorld.ClosestConvexResultCallback(mouse.Near, mouse.Far)) { callback.CollisionFilterGroup = CollisionFilterGroups.StaticFilter; callback.CollisionFilterMask = CollisionFilterGroups.StaticFilter; CollisionManager.World.ConvexSweepTest((ConvexShape)CollisionObject.CollisionShape, from, to, callback); var lookingNormal = (callback.ConvexToWorld - callback.ConvexFromWorld).Normalized(); var dot = Vector3.Dot(callback.HitNormalWorld, lookingNormal); Console.WriteLine(callback.HitNormalWorld); if (callback.HasHit) { if (!this.Selected) { return; } var matrix = this.WorldMatrix.ClearTranslation(); var collMtrix = this.Model.RenderModel.compressionInfo[0].ToExtentsMatrix(); Vector3 linVel, angVel; TransformUtil.CalculateVelocity(from, to, 1.0f, out linVel, out angVel); Matrix4 T; TransformUtil.IntegrateTransform(from, linVel, angVel, callback.ClosestHitFraction, out T); this.WorldMatrix = T; } } }