Scusate il triplo post, ma ho impostato la telecamera per far si che si muova ed ora mi succede di nuovo che mi appare il modello solo una volta!
namespace Domino
{
public class Principale : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
KeyboardState StatoDellaTastiera;
MouseState StatoDelMouse;
List<ListDomino> NDomino = new List<ListDomino>();
Model Modello;
Vector3 Incrementatore = new Vector3(0, 0, 0);
Vector3 PosizioneCamera;
float RotazioneCamera;
float BeccheggioCamera;
float rollioCamera;
Vector3 camUp;
Vector3 camLook;
Vector3 camLeft;
public Principale()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
Window.Title = "Domino";
}
protected override void Initialize()
{
graphics.PreferredBackBufferWidth = Convert.ToInt32("1024");
graphics.PreferredBackBufferHeight = Convert.ToInt32("768");
graphics.ToggleFullScreen();
PosizioneCamera = new Vector3(0f, 100f, 0f);
RotazioneCamera = 0f;
BeccheggioCamera = 0f;
rollioCamera = 0.0f;
PosizioneCamera = new Vector3(50, 50, -100f);
Cursor.Show();
base.Initialize();
}
protected override void LoadContent()
{
Modello = Content.Load<Model>("Modelli/ModelloDomino");
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
StatoDellaTastiera = Keyboard.GetState();
StatoDelMouse = Mouse.GetState();
float secondiDpFrame = (float)gameTime.ElapsedGameTime.TotalSeconds;
RotazioneCamera -= (float)(StatoDelMouse.X - graphics.PreferredBackBufferWidth / 2) * secondiDpFrame;
BeccheggioCamera += (float)(StatoDelMouse.Y - graphics.PreferredBackBufferHeight / 2) * secondiDpFrame;
Mouse.SetPosition(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2);
Matrix rot = Matrix.CreateFromYawPitchRoll(RotazioneCamera, BeccheggioCamera, rollioCamera);
camUp = Vector3.Transform(Vector3.UnitY, rot);
camLook = Vector3.Transform(Vector3.UnitZ, rot);
camLeft = Vector3.Cross(camUp, camLook);
float speed = 100.0f;
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape))
{
Exit();
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.A))
{
ListDomino DMN = new ListDomino();
DMN.ModelloDomino = Modello;
DMN.Posizione = new Vector3(Incrementatore.X, Incrementatore.Y, Incrementatore.Z);
NDomino.Add(DMN);
Incrementatore = new Vector3(Incrementatore.X + 50f, 0, 0);
Thread.Sleep(100);
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left))
{
PosizioneCamera += speed * secondiDpFrame * camLeft;
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right))
{
PosizioneCamera -= speed * secondiDpFrame * camLeft;
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up))
{
PosizioneCamera += speed * secondiDpFrame * camLook;
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down))
{
PosizioneCamera -= speed * secondiDpFrame * camLook;
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.PageUp))
{
PosizioneCamera += speed * secondiDpFrame * camUp;
}
if (StatoDellaTastiera.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.PageDown))
{
PosizioneCamera -= speed * secondiDpFrame * camUp;
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);
int i = 0;
for (i = 0; i < NDomino.Count; i++)
{
Matrix[] boneTrasforms = new Matrix[NDomino.ModelloDomino.Bones.Count];
Modello.CopyAbsoluteBoneTransformsTo(boneTrasforms);
foreach (ModelMesh mesh in NDomino.ModelloDomino.Meshes)
{
Matrix World = boneTrasforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(NDomino.Posizione);
foreach (BasicEffect effect in mesh.Effects)
{
effect.TextureEnabled = true;
effect.EnableDefaultLighting();
effect.Projection = Matrix.CreatePerspectiveFieldOfView(1, 1.33f, 10, 10000);
effect.View = Matrix.CreateLookAt(PosizioneCamera, PosizioneCamera + camLook, camUp);
}
mesh.Draw(SaveStateMode.SaveState);
}
}
base.Draw(gameTime);
}
public struct ListDomino
{
public Vector3 Posizione;
public Model ModelloDomino;
}
}
}
|