#region Using Statements using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; #endregion namespace XNADemo { /// /// This is the main type for your game /// public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; ContentManager content; private Matrix projection; private Matrix view; private Matrix world; private Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 3.0f); private Vector3 cameraTarget = Vector3.Zero; private Vector3 cameraUpVector = Vector3.Up; private VertexPositionNormalTexture[] vertices; private short[] indices; private FPS fps; public Game1() { graphics = new GraphicsDeviceManager(this); content = new ContentManager(Services); #if PROFILE this.IsFixedTimeStep = false; graphics.SynchronizeWithVerticalRetrace = false; fps = new FPS(this); Components.Add(fps); #endif #if DEBUG fps = new FPS(this); Components.Add(fps); #endif } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// Load your graphics content. If loadAllContent is true, you should /// load content from both ResourceManagementMode pools. Otherwise, just /// load ResourceManagementMode.Manual content. /// /// Which type of content to load. protected override void LoadGraphicsContent(bool loadAllContent) { InitializeCamera(); InitializeVertices(); InitializeIndices(); if (loadAllContent) { // TODO: Load any ResourceManagementMode.Automatic content } // TODO: Load any ResourceManagementMode.Manual content } /// /// Unload your graphics content. If unloadAllContent is true, you should /// unload content from both ResourceManagementMode pools. Otherwise, just /// unload ResourceManagementMode.Manual content. Manual content will get /// Disposed by the GraphicsDevice during a Reset. /// /// Which type of content to unload. protected override void UnloadGraphicsContent(bool unloadAllContent) { if (unloadAllContent) { // TODO: Unload any ResourceManagementMode.Automatic content content.Unload(); } // TODO: Unload any ResourceManagementMode.Manual content } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here world = Matrix.Identity; graphics.GraphicsDevice.VertexDeclaration = new VertexDeclaration(graphics.GraphicsDevice, VertexPositionNormalTexture.VertexElements); BasicEffect effect = new BasicEffect(graphics.GraphicsDevice, null); world = Matrix.Identity; effect.World = world; effect.Projection = projection; effect.View = view; effect.EnableDefaultLighting(); effect.Begin(); foreach (EffectPass pass in effect.CurrentTechnique.Passes) { pass.Begin(); graphics.GraphicsDevice.DrawUserIndexedPrimitives( PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices, 0, indices.Length / 3); pass.End(); } effect.End(); base.Draw(gameTime); } void InitializeCamera() { float aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width / (float)graphics.GraphicsDevice.Viewport.Height; Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 0.0001f, 1000.0f, out projection); Matrix.CreateLookAt(ref cameraPosition, ref cameraTarget, ref cameraUpVector, out view); } private void InitializeVertices() { Vector3 position; Vector2 textureCoordinates; vertices = new VertexPositionNormalTexture[4]; //top left position = new Vector3(-1, 1, -3); textureCoordinates = new Vector2(0, 0); vertices[0] = new VertexPositionNormalTexture(position, Vector3.Forward, textureCoordinates); //bottom right position = new Vector3(1, -1, 0); textureCoordinates = new Vector2(1, 1); vertices[1] = new VertexPositionNormalTexture(position, Vector3.Forward, textureCoordinates); //bottom left position = new Vector3(-1, -1, -3); textureCoordinates = new Vector2(1, 1); vertices[2] = new VertexPositionNormalTexture(position, Vector3.Forward, textureCoordinates); //top right position = new Vector3(1, 1, 0); textureCoordinates = new Vector2(1, 0); vertices[3] = new VertexPositionNormalTexture(position, Vector3.Forward, textureCoordinates); } private void InitializeIndices() { //6 vertices make up 2 rtriangles which make up our rectangle indices = new short[6]; //triangle 1 (bottom portion) indices[0] = 0; //top left indices[1] = 1; //bottom right indices[2] = 2; //bottom left //triangle2 (top portion) indices[3] = 0; //top left indices[4] = 3; //top right indices[5] = 1; //bottom right } } }