Click here to Skip to main content
12,884,771 members (31,064 online)
Click here to Skip to main content


127 bookmarked
Posted 17 Jul 2007

XNA: A Beginner's Introduction

, 17 Jul 2007 CPOL
Getting started with XNA, Blender, and 3D modeling
#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;

namespace xnaIntro
	/// <summary>
	/// This is the main type for your game
	/// </summary>
	public class Game1 : Microsoft.Xna.Framework.Game
		GraphicsDeviceManager graphics;
		ContentManager content;

		protected float aspectRatio;
		protected Vector3 modelPosition = Vector3.Zero;
		protected Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 10.0f);
		protected Model myModel;
		protected float modelRotation = 0.0f;
		protected Matrix lookAt;
		protected Matrix projection;

		public Game1()
			graphics = new GraphicsDeviceManager(this);
			content = new ContentManager(Services);

		/// <summary>
		/// 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.
		/// </summary>
		protected override void Initialize()
			// TODO: Add your initialization logic here


		/// <summary>
		/// Load your graphics content.  If loadAllContent is true, you should
		/// load content from both ResourceManagementMode pools.  Otherwise, just
		/// load ResourceManagementMode.Manual content.
		/// </summary>
		/// <param name="loadAllContent">Which type of content to load.</param>
		protected override void LoadGraphicsContent(bool loadAllContent)
			if (loadAllContent)
				myModel = content.Load<Model>("Content\\Models\\cube");

			aspectRatio = ((float)graphics.GraphicsDevice.Viewport.Width) / ((float)graphics.GraphicsDevice.Viewport.Height);
			lookAt = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up);
			projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f);

		/// <summary>
		/// 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.
		/// </summary>
		/// <param name="unloadAllContent">Which type of content to unload.</param>
		protected override void UnloadGraphicsContent(bool unloadAllContent)
			if (unloadAllContent)
				// TODO: Unload any ResourceManagementMode.Automatic content

			// TODO: Unload any ResourceManagementMode.Manual content

		/// <summary>
		/// Allows the game to run logic such as updating the world,
		/// checking for collisions, gathering input and playing audio.
		/// </summary>
		/// <param name="gameTime">Provides a snapshot of timing values.</param>
		protected override void Update(GameTime gameTime)
			// Allows the game to exit
			if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

			modelRotation += (float)gameTime.ElapsedGameTime.TotalMilliseconds * MathHelper.ToRadians(0.1f);

		/// <summary>
		/// This is called when the game should draw itself.
		/// </summary>
		/// <param name="gameTime">Provides a snapshot of timing values.</param>
		protected override void Draw(GameTime gameTime)

			Matrix[] transforms = new Matrix[myModel.Bones.Count];

			// Draw the model. A model can have multiple meshes, so loop.
			foreach (ModelMesh mesh in myModel.Meshes)
				foreach (BasicEffect effect in mesh.Effects)
					effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationX(modelRotation) * Matrix.CreateRotationY(modelRotation);
					effect.View = lookAt;
					effect.Projection = projection;

				// Draw the mesh, using the effects set above.


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Marc Clifton
United States United States
Marc is the creator of two open source projects, MyXaml, a declarative (XML) instantiation engine and the Advanced Unit Testing framework, and Interacx, a commercial n-tier RAD application suite.  Visit his website,, where you will find many of his articles and his blog.

Marc lives in Philmont, NY.

You may also be interested in...

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170424.1 | Last Updated 17 Jul 2007
Article Copyright 2007 by Marc Clifton
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid