public static int CreateCamera(GraphicsDevice gd, int entityTrackId) { ComponentManager cm = ComponentManager.GetInstance(); TransformComponent transform = new TransformComponent() { Position = new Vector3(-10, 350, -170), Rotation = Vector3.Right, Up = Vector3.Up }; CameraComponent camera = new CameraComponent() { FieldOfView = 45, NearPlaneDistance = 1, FarPlaneDistance = 10000, AspectRatio = gd.DisplayMode.AspectRatio, }; TrackingCameraComponent trackComp = new TrackingCameraComponent(entityTrackId, new Vector3(0, 10, 20)); int cam = cm.AddEntityWithComponents(new IComponent[] { camera, trackComp, transform }); return(cam); }
public void Update(GameTime gametime) { foreach (var tracker in cm.GetComponentsOfType <TrackingCameraComponent>()) { TrackingCameraComponent trackComp = (TrackingCameraComponent)tracker.Value; TransformComponent trackPos = cm.GetComponentForEntity <TransformComponent>(trackComp.Target); TransformComponent camPos = cm.GetComponentForEntity <TransformComponent>(tracker.Key); CameraComponent camComp = cm.GetComponentForEntity <CameraComponent>(tracker.Key); Matrix rotationMatrix = Matrix.CreateRotationY(trackPos.Rotation.X); Vector3 transformedOffset = Vector3.Transform(trackComp.Offset, rotationMatrix); camPos.Position = trackPos.Position + transformedOffset; camPos.Rotation = trackPos.Position - camPos.Position; } }
public static int CreateTrackingCamera(GraphicsDevice gd, int entityTrackId) { TransformComponent transform = new TransformComponent() { Position = new Vector3(-10, 350, -170), Rotation = Vector3.Right, Up = Vector3.Up }; CameraComponent camera = new CameraComponent() { FieldOfView = 45, NearPlaneDistance = 1, FarPlaneDistance = 10000, AspectRatio = gd.DisplayMode.AspectRatio, }; TrackingCameraComponent trackingCamera = new TrackingCameraComponent(entityTrackId, new Vector3(0, 3, 10)); return(cm.AddEntityWithComponents(camera, trackingCamera, transform)); }