/// <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; } }