/// <summary>
        /// crea un nuevo colisionador
        /// </summary>
        /// <param name="terreno">el tereno desde el que voy a tomar los vertices para probar la colision</param>
        /// <param name="tamanio">el tamanio del terreno base con el que hago las pruebas</param>
        /// <param name="escalaY">la escala de los terrenos en el eje y </param>
        public Colisionador(Terrain terreno, float tamanio, float escalaY)
        {
            verticesTerreno = (CustomVertex.PositionTextured[]) terreno.vbTerrain.Lock(0,LockFlags.ReadOnly);
            terreno.vbTerrain.Unlock();

            this.escalaY = escalaY * 255;
            tamanio_terrenos = tamanio;
            centros_probables = new List<Vector3>();
        }
        //Si se quiere cargar la lista de terrenos hq, se manda la lista hq_terrain y el heightmap hq
        public void agregar_terrenos_en_lista_de_calidad(List<Terrain> lista, string heightmap, float escalaXZ, float escalaY)
        {
            Terrain Loader;

            foreach (string textura in texturas)
            {
                Loader = new Terrain();
                Loader.loadHeightmap(heightmap, escalaXZ, escalaY, new Vector3(0, 0, 0));
                Loader.loadTexture(textura);
                lista.Add(Loader);
            }
        }
        public override void init()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Path de Heightmap high quality del terreno
            currentHeightmap_hq = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\" + "Heightmaps\\" + "Heightmap_hq.jpg";

            //Path de Heightmap medium quality del terreno
            currentHeightmap_mq = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\" + "Heightmaps\\" + "Heightmap_mq.jpg";

            //Path de Heightmap low quality del terreno
            currentHeightmap_lq = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\" + "Heightmaps\\" + "Heightmap_lq.jpg";

            //Escala del mapa
            ScaleXZ_hq = 40f;
            ScaleXZ_mq = (ScaleXZ_hq * 2) + 0.7f;
            ScaleXZ_lq = (ScaleXZ_mq * 2) + 5f ;

            currentScaleY = 1.3f;

            //Path de Textura default del terreno y Modifier para cambiarla
            currentTexture = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\" + "Heightmaps\\" + "TerrainTexture.jpg";
            GuiController.Instance.Modifiers.addTexture("texture", currentTexture);

            //Carga terrenos de alta,media y baja definicion: cargar heightmap y textura de color

            Bitmap bitmap_hq = (Bitmap)Bitmap.FromFile(currentHeightmap_hq);

            Bitmap bitmap_mq = (Bitmap)Bitmap.FromFile(currentHeightmap_mq);

            Bitmap bitmap_lq = (Bitmap)Bitmap.FromFile(currentHeightmap_lq);

            //Este es el ancho de referencia gral
            width = ((bitmap_hq.Size.Width * ScaleXZ_hq) - 85);

            //No se van a renderizar mas de 5 terrenos"hacia adelante". Se utiliza para hallar intersecciones con el plano
            valor_grande = 5 * width;

            terrain_hq = new Terrain();
            terrain_hq.loadHeightmap(currentHeightmap_hq, ScaleXZ_hq, currentScaleY, new Vector3(0, 0, 0));
            terrain_hq.loadTexture(currentTexture);

            terrain_mq = new Terrain();
            terrain_mq.loadHeightmap(currentHeightmap_mq, ScaleXZ_mq, currentScaleY, new Vector3(0, 0, 0));
            terrain_mq.loadTexture(currentTexture);

            terrain_lq = new Terrain();
            terrain_lq.loadHeightmap(currentHeightmap_lq, ScaleXZ_lq, currentScaleY, new Vector3(0, 0, 0));
            terrain_lq.loadTexture(currentTexture);

            //Configurar FPS Camara
            GuiController.Instance.FpsCamera.Enable = true;
            GuiController.Instance.FpsCamera.MovementSpeed = 7000f;
            GuiController.Instance.FpsCamera.JumpSpeed = 1000f;
            Vector3 centro_camara;
            centro_camara.X = 0;
            centro_camara.Y = 0;
            centro_camara.Z = 0;
            centro_camara.Y=centro_camara.Y+495.0046f;
            GuiController.Instance.FpsCamera.setCamera(centro_camara, new Vector3(164.9481f, 35.3185f, -61.5394f));

            //proyeccion de la camara sobre el plano xz
            pos_original = GuiController.Instance.FpsCamera.getPosition();
            pos_original.Y = 0;

            //Generar lista de posiciones inicial
            Vector3 nuevo_punto;
            float inner_width = width;
            posiciones_centros=new List<Vector3>();

            pos_original.X = pos_original.X - (width * 4);
            for (int i = 0; i < 9; i++){

                nuevo_punto = new Vector3();
                nuevo_punto = pos_original;
                posiciones_centros.Add(nuevo_punto);

                for (int j = 0; j < 4; j++){

                    nuevo_punto=new Vector3();
                    nuevo_punto=pos_original;
                    nuevo_punto.Z = pos_original.Z + inner_width;
                    posiciones_centros.Add(nuevo_punto);

                    nuevo_punto = new Vector3();
                    nuevo_punto = pos_original;
                    nuevo_punto.Z = pos_original.Z - inner_width;
                    posiciones_centros.Add(nuevo_punto);

                    inner_width = inner_width + width;
                }
                inner_width = width;
                pos_original.X = pos_original.X + width;
            }
        }