locked
Colisiones con Mundo en 3d cargado de archivo FBX RRS feed

  • Pregunta

  • Tengo un problema con mi proyecto de universidad de XNA 4.0.

    Yo puedo cargar un modelo 3D a partir de un archivo FBX y puedo navegar hacia adelante, atrás y girar a los lados pero  el problema es que la cámara atraviesa los muros.

    Deseo poder detectar las colisiones entre la cámara y los muros para impedir que traspasen los objetos.

    ¿Alguien sabe como se lo puede hacer? El código de mi proyecto lo pueden encontrar aquí ---> http://goo.gl/DUAdcf

    Intente hacer algo como lo siguiente pero no me funciona como deseo:

    string[] permitidos = new string[] { "TERRENO", "SUELO"};

            /// <summary>
            /// Updates the position and direction of the avatar.
            /// </summary>
            void UpdateAvatarPosition()
            {
                KeyboardState keyboardState = Keyboard.GetState();
                GamePadState currentState = GamePad.GetState(PlayerIndex.One);

                Vector3 cameraPosition = avatarPosition;

                Matrix rotationMatrix = Matrix.CreateRotationY(avatarYaw);

                // Create a vector pointing the direction the camera is facing.
                Vector3 transformedReference = Vector3.Transform(cameraReference, rotationMatrix);

                // Calculate the position the camera is looking at.
                Vector3 cameraLookat = cameraPosition + transformedReference;


                BoundingSphere p = new BoundingSphere(cameraLookat, 5);



                foreach (ModelMesh mesh in box.Meshes)
                {
                    // Check whether the bounding boxes of the two cubes intersect.
                    BoundingSphere c1BoundingSphere = mesh.BoundingSphere;

                    if (p.Intersects(c1BoundingSphere))
                    {
                        bool esColision = true;
                        foreach (string textura in permitidos)
                        {
                            if (mesh.Name.ToUpper().IndexOf(textura.ToUpper()) >= 0)
                            {
                                esColision = false;
                                break;

                            }
                        }

                       if (esColision) //si se trata de una colision no permito moverse
                       {
                           return;
                       }
                    }
                }

    Muchas gracias por su ayuda.





    lunes, 2 de diciembre de 2013 1:20