I was going through tutorial of xna 4 of combining 2d and 3d objects like making 2d background and 3d object, so i found a code
GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };
i used this code in my program after 2d drawing and before 3d drawing to turn on depth buffer.
since my code was on xna 3.1 i got error as
Please also suggest some tips on moving a camera behind objects.
I know DepthStencilState is only used in xna 4,so please suggest some alternate ways to combining 2d and 3d objects in XNA 3.1
GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };
i used this code in my program after 2d drawing and before 3d drawing to turn on depth buffer.
since my code was on xna 3.1 i got error as
Please also suggest some tips on moving a camera behind objects.
Error 1 'Microsoft.Xna.Framework.Graphics.GraphicsDevice' does not contain a definition for 'DepthStencilState' and no extension method 'DepthStencilState' accepting a first argument of type 'Microsoft.Xna.Framework.Graphics.GraphicsDevice' could be found (are you missing a using directive or an assembly reference?) Error 2 The type or namespace name 'DepthStencilState' could not be found (are you missing a using directive or an assembly reference?)
I know DepthStencilState is only used in xna 4,so please suggest some alternate ways to combining 2d and 3d objects in XNA 3.1
using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace WindowsGame3D1 { /// <summary> /// This is the main type for your game /// </summary> public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; private Model helicopterModel; private float mainRotorAngle = 0; private float tailRotorAngle = 0; private Vector3 position = new Vector3(0, 0, 0); private float angle = 0f; private Matrix world = Matrix.CreateTranslation(new Vector3(0, 0, 0)); private Matrix view = Matrix.CreateLookAt(new Vector3(10, 10, 10), new Vector3(0, 0, 0), Vector3.UnitY); private Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), 800f / 600f, 0.1f, 100f); private Texture2D background; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// <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 base.Initialize(); } /// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); background = Content.Load<Texture2D>("Build"); helicopterModel = Content.Load<Model>("Helicopter"); // TODO: use this.Content to load your game content here } /// <summary> /// UnloadContent will be called once per game and is the place to unload /// all content. /// </summary> protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// <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) this.Exit(); KeyboardState state = Keyboard.GetState(); bool Space = state.IsKeyDown(Keys.Space); bool Up = state.IsKeyDown(Keys.Up); bool down = state.IsKeyDown(Keys.Down); // TODO: Add your update logic here if (state.IsKeyDown(Keys.Space)) { tailRotorAngle -= 0.5f; mainRotorAngle -= 1.0f; angle += 0.0199f; position += Vector3.Transform(new Vector3(0.1f, 0, 0), Matrix.CreateRotationY(MathHelper.ToRadians(90) + angle)); } else { tailRotorAngle -= 0.0f; mainRotorAngle -= 0.1f; angle += 0.02f; position += Vector3.Transform(new Vector3(0.0f,-0.09f, 0), Matrix.CreateRotationY(MathHelper.ToRadians(90) + angle)); } // TODO: Add your update logic here if (state.IsKeyDown(Keys.Up) && state.IsKeyDown(Keys.Space)) { tailRotorAngle -= 0.5f; mainRotorAngle -= 1.0f; angle += 0.02f; position += Vector3.Transform(new Vector3(0.1f, 0.1f, 0), Matrix.CreateRotationY(MathHelper.ToRadians(90) + angle)); } if (state.IsKeyDown(Keys.Down) && state.IsKeyDown(Keys.Space)) { tailRotorAngle -= 0.5f; mainRotorAngle -= 1.0f; angle += 0.02f; position += Vector3.Transform(new Vector3(0.1f, -0.1f, 0), Matrix.CreateRotationY(MathHelper.ToRadians(360) + angle)); } base.Update(gameTime); } /// <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) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White); spriteBatch.End(); GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true }; window.AllowUserResizing = true; // TODO: Add your drawing code here Matrix[] meshWorldMatrices = new Matrix[3]; meshWorldMatrices[0] = Matrix.CreateTranslation(new Vector3(0, 0, 0)); meshWorldMatrices[1] = Matrix.CreateRotationY(mainRotorAngle); meshWorldMatrices[2] = Matrix.CreateTranslation(new Vector3(0, -0.25f, -3.4f)) * Matrix.CreateRotationX(tailRotorAngle) * Matrix.CreateTranslation(new Vector3(0, 0.25f, 3.4f)); world = Matrix.CreateRotationY(angle) * Matrix.CreateTranslation(position); DrawModel(helicopterModel, world, meshWorldMatrices, view, projection); base.Draw(gameTime); } private void DrawModel(Model model, Matrix objectWorldMatrix, Matrix[] meshWorldMatrices, Matrix view, Matrix projection) { for (int index = 0; index < model.Meshes.Count; index++) { ModelMesh mesh = model.Meshes[index]; foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.EnableDefaultLighting(); effect.PreferPerPixelLighting = true; effect.World = mesh.ParentBone.Transform * meshWorldMatrices[index] * objectWorldMatrix; effect.View = view; effect.Projection = projection; } mesh.Draw(); } } } }