Foros - Stratos

Stratos => XNA => Mensaje iniciado por: pichoneto en 26 de Mayo de 2011, 12:04:39 PM

Título: Control 3D
Publicado por: pichoneto en 26 de Mayo de 2011, 12:04:39 PM
Buenas!

Estoy investigando el mundo de XNA y me he metido directamente al 3D. Soy capaz de cargar un modelo (un tanque) perfectamente, y lo voy rotando sin problemas. Hasta que soy yo el que lo quiere girar y no el método upsate de manera automática. Cuando cargo una imagen para hacer el típico joystick, el renderizado se me estropa, y se me cargan las orugas que deberían estar "detras" como si estuvieran delante, y cosas así.

Cómo puedo arreglar esto? O no debería cargar una imagen y debo pintarlo directamente? Esty programando para Windows phone

Un saludo!
Título: Re: Control 3D
Publicado por: WaaghMan en 26 de Mayo de 2011, 02:20:42 PM
Parece un tema de estados de renderizado, que se ha desactivado el ZBuffer al pintar el rectángulo... si pones un poco de código mejor.
Título: Re: Control 3D
Publicado por: pichoneto en 26 de Mayo de 2011, 07:07:38 PM
Buenas!

Tienes razón, con código siempre mejor, pero como era tan poquito... : )

En el resto de código no hago nada más, en el método LoadContent cargo el modelo y la imagen y casi nada más


protected override void Draw(GameTime gameTime)       
        {           
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
            spriteBatch.Draw(bullseye, new Vector2(50, 50), Color.White);
            spriteBatch.End();

            // Copy any parent transforms.           
            Matrix[] transforms = new Matrix[tank.Bones.Count];           
            tank.CopyAbsoluteBoneTransformsTo(transforms);           
            // Draw the model. A model can have multiple meshes, so loop.           
            foreach (ModelMesh mesh in tank.Meshes)           
            {               
                // This is where the mesh orientation is set, as well as our camera and projection.               
                foreach (BasicEffect effect in mesh.Effects)               
                {                     
                    effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(tankPosition);
                    effect.View = Matrix.CreateRotationY(cameraRotationY) * Matrix.CreateRotationZ(cameraRotationZ) * Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up);                   
                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f);
                }               
                // Draw the mesh, using the effects set above.               
                mesh.Draw();           
            }
            base.Draw(gameTime);       
        }


Muchas gracias!
Título: Re: Control 3D
Publicado por: blau en 26 de Mayo de 2011, 07:15:27 PM
Habilita el Z Buffer anstes de pintar el tanque...

GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Título: Re: Control 3D
Publicado por: pichoneto en 26 de Mayo de 2011, 08:07:23 PM
Bieeeen!

Mil gracias!!