private void CrearPoligonosTerreno(Terreno terreno) { // Creo los poligonos del terreno una única vez. if (PoligonosTerreno.Count == 0) { Vertice verticeAnterior = null; foreach (Vertice vertice in terreno.Vertices) { Gl.glPushMatrix(); if (verticeAnterior != null) { Poligono poligono = new Poligono(); poligono.ColorLinea = new ColorRGB(0.4f, 0.4f, 0.4f); poligono.ColorRelleno = new ColorRGB(0.4f, 0.4f, 0.4f); poligono.Puntos.Add(new PuntoFlotante(verticeAnterior.X, 0)); poligono.Puntos.Add(new PuntoFlotante(verticeAnterior.X, verticeAnterior.Y)); poligono.Puntos.Add(new PuntoFlotante(vertice.X, vertice.Y)); poligono.Puntos.Add(new PuntoFlotante(vertice.X, 0)); this.PoligonosTerreno.Add(poligono); } verticeAnterior = vertice; Gl.glPopMatrix(); } } }
private void CrearPoligonosRueda(Rueda rueda) { PoligonosRueda.Clear(); // primero agrego la rueda externa Poligono ruedaExterna = new Poligono(); ruedaExterna.ColorLinea = new ColorRGB(1, 0, 0); ruedaExterna.ColorRelleno = new ColorRGB(1, 0, 0); ruedaExterna.Puntos = Bresenham.ObtenerPuntosEquidistantesCirculo( new Circulo(new PuntoFlotante(rueda.Centro.X, rueda.Centro.Y), rueda.RadioExterno), 12); // agrego a rueda interna Poligono ruedaInterna = new Poligono(); ruedaInterna.ColorLinea = new ColorRGB(1, 1, 1); ruedaInterna.ColorRelleno = new ColorRGB(1, 1, 1); ruedaInterna.Puntos = Bresenham.ObtenerPuntosEquidistantesCirculo( new Circulo(new PuntoFlotante(rueda.Centro.X, rueda.Centro.Y), rueda.RadioInterno), 12); // agrego los triangulos Poligono triangulo1 = new Poligono(); triangulo1.ColorLinea = new ColorRGB(0, 1, 1); triangulo1.ColorRelleno = new ColorRGB(1, 0, 0); triangulo1.Puntos.Add(new PuntoFlotante(rueda.Centro.X, rueda.Centro.Y)); triangulo1.Puntos.Add(ruedaInterna.Puntos[0]); triangulo1.Puntos.Add(ruedaInterna.Puntos[1]); triangulo1.Puntos.Add(ruedaInterna.Puntos[2]); triangulo1.Puntos.Add(ruedaInterna.Puntos[3]); Poligono triangulo2 = new Poligono(); triangulo2.ColorLinea = new ColorRGB(0, 1, 1); triangulo2.ColorRelleno = new ColorRGB(1, 0, 0); triangulo2.Puntos.Add(new PuntoFlotante(rueda.Centro.X, rueda.Centro.Y)); triangulo2.Puntos.Add(ruedaInterna.Puntos[8]); triangulo2.Puntos.Add(ruedaInterna.Puntos[9]); triangulo2.Puntos.Add(ruedaInterna.Puntos[10]); triangulo2.Puntos.Add(ruedaInterna.Puntos[11]); PoligonosRueda.Add(triangulo1); PoligonosRueda.Add(triangulo2); PoligonosRueda.Add(ruedaInterna); PoligonosRueda.Add(ruedaExterna); }