Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }