Esempio n. 1
0
        public bool RayCastSingle(Vector3 from, Vector3 to, int filterMask, int filterGroup, ref Vector3 contactPoint, ref Vector3 contactNormal)
        {
            bool hasHit = false;

            BulletSharp.CollisionWorld.ClosestRayResultCallback callback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(from, to);
            callback.CollisionFilterGroup = (BulletSharp.CollisionFilterGroups)filterGroup;
            callback.CollisionFilterMask  = (BulletSharp.CollisionFilterGroups)filterMask;

            hasHit = callback.HasHit;
            if (hasHit)
            {
                contactPoint  = callback.HitPointWorld;
                contactNormal = callback.HitNormalWorld;
            }
            return(hasHit);
        }
 public override SegmentInterceptInfo SegmentIntersect(Ray raio, System.Func <IPhysicObject, bool> filter, float maxDistance)
 {
     BulletSharp.CollisionWorld.ClosestRayResultCallback RayResultCallback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(raio.Position, raio.Direction * maxDistance);
     world.RayTest(raio.Position, raio.Direction * maxDistance, RayResultCallback);
     if (RayResultCallback.HasHit)
     {
         SegmentInterceptInfo SegmentInterceptInfo = new SegmentInterceptInfo();
         SegmentInterceptInfo.Distance       = RayResultCallback.ClosestHitFraction * maxDistance;
         SegmentInterceptInfo.PhysicObject   = RayResultCallback.CollisionObject.UserObject as IPhysicObject;
         SegmentInterceptInfo.ImpactNormal   = RayResultCallback.HitNormalWorld;
         SegmentInterceptInfo.ImpactPosition = RayResultCallback.HitPointWorld;
         return(SegmentInterceptInfo);
     }
     else
     {
         return(null);
     }
 }
Esempio n. 3
0
        private void glControl1_MouseClick_1(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (!gl_loaded) return;
            var mouse = new
            {
                Close = camera.Project(new Vector2(e.X, e.Y), depth: -1),
                Far = camera.Project(new Vector2(e.X, e.Y), depth: 1)
            };

            var callback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(mouse.Close, mouse.Far);
            collisionWorld.PerformDiscreteCollisionDetection();
            collisionWorld.RayTest(mouse.Close, mouse.Far, callback);

            if (callback.HasHit)
            {
                var clickableInterface = callback.CollisionObject.UserObject as IClickable;
                if (clickableInterface != null)
                {
                    clickableInterface.OnMouseClickHandler(this, new MouseEventArgs(camera, new Vector2(e.X, e.Y), callback.CollisionObject.WorldTransform.ExtractTranslation(), e.Button));
                }
            }
        }
        public bool RayCastSingle(Vector3 from, Vector3 to, int filterMask, int filterGroup, ref Vector3 contactPoint, ref Vector3 contactNormal)
        {

            bool hasHit = false;
            BulletSharp.CollisionWorld.ClosestRayResultCallback callback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(from, to);
            callback.CollisionFilterGroup = (BulletSharp.CollisionFilterGroups)filterGroup;
            callback.CollisionFilterMask = (BulletSharp.CollisionFilterGroups)filterMask;

            hasHit = callback.HasHit;
            if (hasHit)
            {
                contactPoint = callback.HitPointWorld;
                contactNormal = callback.HitNormalWorld;
            }
            return hasHit;
        }
 public override SegmentInterceptInfo SegmentIntersect(Ray raio, System.Func<IPhysicObject, bool> filter, float maxDistance)
 {
     BulletSharp.CollisionWorld.ClosestRayResultCallback RayResultCallback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(raio.Position, raio.Direction * maxDistance);
     world.RayTest(raio.Position, raio.Direction * maxDistance, RayResultCallback);
     if (RayResultCallback.HasHit)
     {
         SegmentInterceptInfo SegmentInterceptInfo = new SegmentInterceptInfo();
         SegmentInterceptInfo.Distance = RayResultCallback.ClosestHitFraction * maxDistance;
         SegmentInterceptInfo.PhysicObject = RayResultCallback.CollisionObject.UserObject as IPhysicObject;
         SegmentInterceptInfo.ImpactNormal = RayResultCallback.HitNormalWorld;
         SegmentInterceptInfo.ImpactPosition = RayResultCallback.HitPointWorld;
         return SegmentInterceptInfo;
     }
     else
     {
         return null;
     }
 }
Esempio n. 6
0
        public void OnMouseDown(object sender, MouseEventArgs e)
        {
            if (Hidden) return;
            var scene = sender as Form1;
            if (scene != null && e.Button == MouseButtons.Left)
            {
                var raycast = new BulletSharp.RaycastInfo();
                var callback = new BulletSharp.CollisionWorld.ClosestRayResultCallback(e.MouseRay.Origin, e.MouseRay.Origin + e.MouseRay.Direction * e.MouseRayFarPoint);
                var collisionWorld = scene.collisionWorld;
                collisionWorld.RayTest(e.MouseRay.Origin, e.MouseRay.Origin + e.MouseRay.Direction * e.MouseRayFarPoint, callback);

                if (callback.HasHit)
                {
                    if (callback.CollisionObject == rightContact)
                        this.selectedAxis = SelectedAxis.U;
                    else if (callback.CollisionObject == forwardContact)
                        this.selectedAxis = SelectedAxis.V;
                    else if (callback.CollisionObject == upContact)
                        this.selectedAxis = SelectedAxis.W;
                    else return;
                    worldRegistrationPosition = callback.HitPointWorld - this.position;
                }
            }
        }