public BallThrowBepu(IScene scene, GraphicFactory factory, GestureType type) : base(scene) { this.Start(); this.factory = factory; _mundo = scene.World; SimpleConcreteGestureInputPlayable SimpleConcreteGestureInputPlayable = new SimpleConcreteGestureInputPlayable(type, (sample) => { IObject physObj = SpawnPrimitive(_mundo.CameraManager.ActiveCamera.Position, Matrix.CreateRotationX(0.5f)); physObj.PhysicObject.Velocity = (_mundo.CameraManager.ActiveCamera.Target - _mundo.CameraManager.ActiveCamera.Position) * 15.0f; physObj.Name = "FlyingBall " + ++i; _mundo.AddObject(physObj); } ); scene.BindInput(SimpleConcreteGestureInputPlayable); }
public BallThrowBepu(IScene scene, GraphicFactory factory, GestureType type) : base(scene) { this.Start(); this.factory = factory; _mundo = scene.World; SimpleConcreteGestureInputPlayable SimpleConcreteGestureInputPlayable = new SimpleConcreteGestureInputPlayable(type, (sample) => { IObject physObj = SpawnPrimitive(_mundo.CameraManager.ActiveCamera.Position, Matrix.Identity); physObj.PhysicObject.Velocity = (_mundo.CameraManager.ActiveCamera.Target - _mundo.CameraManager.ActiveCamera.Position) * 10.0f; physObj.Name = "FlyingBall " + ++i; _mundo.AddObject(physObj); (physObj.Material.Shader as ForwardXNABasicShader).BasicEffect.EnableDefaultLighting(); } ); scene.BindInput(SimpleConcreteGestureInputPlayable); }
/// <summary> /// Initializes a new instance of the <see cref="CameraFirstPerson"/> class. /// </summary> /// <param name="lrRot">The leftright rotation.</param> /// <param name="udRot">The updown rotation.</param> /// <param name="startingPos">The starting pos.</param> /// <param name="viewport">The viewport.</param> public P3DCamera(IScene scene, float lrRot, float udRot, Vector3 startingPos, Viewport viewport) { this.world = scene.World; init(lrRot, udRot, startingPos, viewport); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.FreeDrag, (sample) => { leftrightRot -= rotationSpeed * sample.Delta.X; updownRot -= rotationSpeed * sample.Delta.Y; UpdateViewMatrix(); } )); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.DoubleTap, (sample) => { onunseek = true; Matrix projection = world.CameraManager.ActiveCamera.Projection; Matrix viewProjection = world.CameraManager.ActiveCamera.View * world.CameraManager.ActiveCamera.Projection; Matrix viewInverse = Matrix.Invert(world.CameraManager.ActiveCamera.View); Matrix projectionInverse = Matrix.Invert(world.CameraManager.ActiveCamera.Projection); Matrix viewProjectionInverse = projectionInverse * viewInverse; Vector3 v = new Vector3(); v.X = (((2.0f * sample.Position.X) / viewPort.Width) - 1); v.Y = -(((2.0f * sample.Position.Y) / viewPort.Height) - 1); v.Z = 0.0f; Ray pickRay = new Ray(); pickRay.Position.X = viewInverse.M41; pickRay.Position.Y = viewInverse.M42; pickRay.Position.Z = viewInverse.M43; pickRay.Direction = Vector3.Normalize(Vector3.Transform(v, viewProjectionInverse) - pickRay.Position); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(pickRay, (a) => true, 9999); if (rti == null) { } else { Vector3 impact = rti.ImpactPosition; Vector3 lookAt = Position - impact; origem = Position; destino = Position + lookAt * 0.8f; passo = 0; } } )); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.Hold, (sample) => { onseek = true; Matrix projection = world.CameraManager.ActiveCamera.Projection; Matrix viewProjection = world.CameraManager.ActiveCamera.View * world.CameraManager.ActiveCamera.Projection; Matrix viewInverse = Matrix.Invert(world.CameraManager.ActiveCamera.View); Matrix projectionInverse = Matrix.Invert(world.CameraManager.ActiveCamera.Projection); Matrix viewProjectionInverse = projectionInverse * viewInverse; Vector3 v = new Vector3(); v.X = (((2.0f * sample.Position.X) / viewPort.Width) - 1); v.Y = -(((2.0f * sample.Position.Y) / viewPort.Height) - 1); v.Z = 0.0f; Ray pickRay = new Ray(); pickRay.Position.X = viewInverse.M41; pickRay.Position.Y = viewInverse.M42; pickRay.Position.Z = viewInverse.M43; pickRay.Direction = Vector3.Normalize(Vector3.Transform(v, viewProjectionInverse) - pickRay.Position); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(pickRay, (a) => true, 9999); if (rti == null) { } else { Vector3 impact = rti.ImpactPosition; Vector3 lookAt = impact - Position; destino = Position + lookAt * 0.8f; origem = Position; passo = 0; } } )); if (useAcelerometer) { accelSensor = new Microsoft.Devices.Sensors.Accelerometer(); // Start the accelerometer try { accelSensor.Start(); accelActive = true; } catch (Microsoft.Devices.Sensors.AccelerometerFailedException e) { // the accelerometer couldn't be started. No fun! accelActive = false; } catch (UnauthorizedAccessException e) { // This exception is thrown in the emulator-which doesn't support an accelerometer. accelActive = false; } accelSensor.ReadingChanged += new EventHandler<Microsoft.Devices.Sensors.AccelerometerReadingEventArgs>(accelSensor_ReadingChanged); } }