/// <summary> /// This is called when the game should draw itself. /// </summary> protected override void Draw(GameTime gameTime) { GraphicsDevice device = graphics.GraphicsDevice; device.Clear(Color.Black); Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, device.Viewport.AspectRatio, 1, 10000); Matrix view = Matrix.CreateLookAt(camera.Position, ship.Position, Vector3.Up); graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // Draw the terrain first, then the sky. This is faster than // drawing the sky first, because the depth buffer can skip // bothering to draw sky pixels that are covered up by the // terrain. This trick works because the code used to draw // the sky forces all the sky vertices to be as far away as // possible, and turns depth testing on but depth writes off. terrain.EditEffects(); terrain.Draw(view, projection); ship.Draw(aspectRatio, view); sky.Draw(view, projection); // If there was any alpha blended translucent geometry in // the scene, that would be drawn here, after the sky. base.Draw(gameTime); }
private void OnDraw(object sender, DrawEventArgs e) { GraphicsDevice graphicsDevice = GraphicsDeviceManager.Current.GraphicsDevice; graphicsDevice.Clear(Color.Black); // Calculate the projection matrix. Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, graphicsDevice.Viewport.AspectRatio, 1, 10000); // Calculate a view matrix, moving the camera around a circle. float time = (float)e.TotalTime.TotalSeconds * 0.333f; float cameraX = (float)Math.Cos(time); float cameraY = (float)Math.Sin(time); Vector3 cameraPosition = new Vector3(cameraX, 0, cameraY) * 64; Vector3 cameraFront = new Vector3(-cameraY, 0, cameraX); Matrix view = Matrix.CreateLookAt(cameraPosition, cameraPosition + cameraFront, Vector3.Up); // Draw the terrain first, then the sky. This is faster than // drawing the sky first, because the depth buffer can skip // bothering to draw sky pixels that are covered up by the // terrain. This trick works because the code used to draw // the sky forces all the sky vertices to be as far away as // possible, and turns depth testing on but depth writes off. DrawTerrain(view, projection); sky.Draw(graphicsDevice, view, projection); // If there was any alpha blended translucent geometry in // the scene, that would be drawn here, after the sky. // Force a redraw so this control will continuously animate. e.InvalidateSurface(); }
/// <summary> /// This is called when the game should draw itself. /// </summary> protected override void Draw(GameTime gameTime) { GraphicsDevice device = graphics.GraphicsDevice; device.Clear(Color.Black); // Calculate the projection matrix. Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, device.Viewport.AspectRatio, 1, 10000); // Calculate a view matrix, moving the camera around a circle. float time = (float)gameTime.TotalGameTime.TotalSeconds * 0.333f; float cameraX = (float)Math.Cos(time); float cameraY = (float)Math.Sin(time); Vector3 cameraPosition = new Vector3(cameraX, 0, cameraY) * 64; Vector3 cameraFront = new Vector3(-cameraY, 0, cameraX); Matrix view = Matrix.CreateLookAt(cameraPosition, cameraPosition + cameraFront, Vector3.Up); // Draw the terrain first, then the sky. This is faster than // drawing the sky first, because the depth buffer can skip // bothering to draw sky pixels that are covered up by the // terrain. This trick works because the code used to draw // the sky forces all the sky vertices to be as far away as // possible, and turns depth testing on but depth writes off. DrawTerrain(view, projection); sky.Draw(view, projection); // If there was any alpha blended translucent geometry in // the scene, that would be drawn here, after the sky. base.Draw(gameTime); }