Пример #1
0
        public void Paint(object sender, PaintEventArgs e)
        {
            if (null == sender)
            {
                return;
            }
            if (false == (sender is CSGL12Control))
            {
                return;
            }

            //Sacar el control de GL y sus dimensiones
            CSGL12Control csgl12Control = (sender as CSGL12Control);
            GL            gl            = csgl12Control.GetGL();

            int clientWidth  = csgl12Control.ClientRectangle.Width;
            int clientHeight = csgl12Control.ClientRectangle.Height;

            if (clientWidth <= 0)
            {
                clientWidth = 1;
            }

            if (clientHeight <= 0)
            {
                clientHeight = 1;
            }

            //Asignar un viewport
            gl.glViewport(0, 0, clientWidth, clientHeight);

            //Limpiar la pantalla con un color de fondo
            gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

            //Asignar la vista del modelo
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glLoadIdentity();
            double aspectRatio = 1.0;

            if (0 != clientHeight)
            {
                aspectRatio = ((double)(clientWidth) / (double)(clientHeight));
            }

            double verticalFieldOfViewAngle = 45.0;

            gl.gluPerspective
            (
                verticalFieldOfViewAngle, // Field of view angle (Y angle; degrees)
                aspectRatio,              // width/height
                0.1,                      // distance to near clipping plane
                64000.0                   // distance to far clipping plane
            );

            gl.glMatrixMode(GL.GL_MODELVIEW);

            gl.glLoadIdentity();
            //aqui va tu dibujito feo

            // Forzar el dibujado de todo y cambiar el buffer de ser necesario
            gl.wglSwapBuffers(csgl12Control.GetHDC());
        }
Пример #2
0
        public void Paint(object sender, PaintEventArgs e)
        {
            if (null == sender)
            {
                return;
            }
            if (false == (sender is CSGL12Control))
            {
                return;
            }
            //Sacar el control de GL y sus dimensiones
            CSGL12Control csgl12Control = (sender as CSGL12Control);
            GL            gl            = csgl12Control.GetGL();
            int           clientWidth   = csgl12Control.ClientRectangle.Width;
            int           clientHeight  = csgl12Control.ClientRectangle.Height;

            if (clientWidth <= 0)
            {
                clientWidth = 1;
            }
            if (clientHeight <= 0)
            {
                clientHeight = 1;
            }
            //Asignar un viewport
            gl.glViewport(0, 0, clientWidth, clientHeight);
            //Limpiar la pantalla con un color de fondo
            gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // NEGRO
            //gl.glClearColor(1.0f, 1.0f, 0.0f, 0.0f); // AMARILLO
            //gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // AZUL
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

            //Proyección
            gl.glMatrixMode(GL.GL_PROJECTION);
            //El efecto de la proyeccion ortogonal es que podremos ver profundidad
            //VOy a poner aqui GL IDENTITY para que no se pierda el dibujo cuando
            //mueva la pantalla una vez realiada la proyeccion ortogonal
            gl.glLoadIdentity();
            //gl.glOrtho(0, 10, 0 , 5, -1, 1);

            gl.glMatrixMode(GL.GL_MODELVIEW);

            // CLASE DE DIBUJOS BASICOS ***************************************

            //aqui va tu dibujito feo
            //gl.glLoadIdentity();

            //Punto en el centro de la pantalla
            //gl.glBegin(GL.GL_POINTS);

            //GL_LINES Agarra los vertices de par en par y los denomina extremos de una linea
            //Se toman en el orden que se declaran
            //gl.glBegin(GL.GL_LINES);

            //GL_TRIANGLES agarra de tres en tres puntos y dibuja un triangulo en medio
            //gl.glBegin(GL.GL_TRIANGLES);

            //GL_QUADS hace lo mismo pero con puntos de cuatro en cuatro
            //el orden de los puntos sigue importando por que es como hará la geometría
            //el resultado es un cuadrilatero
            //gl.glBegin(GL.GL_QUADS);

            //TRIANGLE STRIP Y QUADSTRIP dibujan figuras regulares pero que se tocan y
            //provocan franjas vacias

            //LINE STRIP hace lineas que se tocan
            //gl.glBegin(GL.GL_LINE_STRIP);

            //GlColor me acepta colores RGB
            //gl.glColor3f(1.0f, 0, 0);

            //acepta tres flotantes
            //gl.glVertex3f(0, 0, 0);
            //3fv acepta arreglos de flotantes

            //gl.glColor3f(1.0f, 0, 1.0f);
            //gl.glVertex3f(-0.5f, 0.5f, 0);

            //gl.glColor3f(1.0f, 1.0f, 0);
            //float[] a = { 0.5f, 0.5f, 0 };
            //gl.glVertex3fv(a);

            //gl.glVertex3f(0, 0.5f, 0);

            //gl.glColor3f(1.0f, 0, 1.0f);
            //gl.glVertex3f(0.5f, 0.0f, 0);

            //gl.glColor3f(1.0f, 1.0f, 0);
            //gl.glVertex3f(-0.5f, -0.5f, 0);

            //iv acepta un arreglo de enteros

            //FIN DE LA CLASE DE DIBUJOS BASICOS **************************************

            //VAMOS AELABORAR UN ALGORITMO PARA PINTAR 100 PUNTOS EN UN ARREGLO FRACTAL

            //MOVER LA CAMARA
            //gl.gluLookAt(
            //    0, .5, .5,
            //    0, 0, 0,
            //    0, 1, 0
            //    );

            gl.glBegin(GL.GL_POINTS);
            //gl.glBegin(GL.GL_TRIANGLES);

            //Damos tres puntos iniciales
            float[] a = { -1f, 1f, -1f };
            float[] b = { 0, 1f, 0 };
            float[] c = { 0, -1f, 1f };

            gl.glVertex3fv(a);
            gl.glVertex3fv(b);
            gl.glVertex3fv(c);

            int    loteria;
            float  lottoHoy    = 1;
            float  lottoAyer   = 1;
            float  lottoAntier = 1;
            Random r           = new Random();

            float[] x = a;
            float[] y = { 0, 0, 0 };

            for (int i = 0; i < 9000; i++)
            {
                if (i > 0)
                {
                    if (i > 1)
                    {
                        lottoAntier = lottoAyer;
                    }
                    lottoAyer = lottoHoy;
                }

                loteria = r.Next(0, 3);
                Debug.WriteLine(loteria);
                //lottoHoy = loteria / 2.0f;
                lottoHoy = loteria / 2;
                //Debug.WriteLine(lottoHoy);

                //gl.glColor3f(lottoHoy, lottoAyer, lottoAntier);

                switch (loteria)
                {
                case 0:
                    //if (i > 0)
                    //{
                    //    if (i > 1)
                    //    {
                    //        lottoAntier = lottoAyer;
                    //    }
                    //    lottoAyer = lottoHoy;
                    //}
                    y[0] = (a[0] + x[0]) / 2;
                    y[1] = (a[1] + x[1]) / 2;
                    y[2] = (a[2] + x[2]) / 2;
                    //gl.glColor3f(1.0f, 0.0f, 0); //ROJO
                    gl.glColor3f(lottoHoy, lottoAyer, lottoAntier);
                    //gl.glColor3f(lottoHoy, lottoAyer, lottoAntier);
                    gl.glVertex3fv(y);
                    x = y;
                    break;

                case 1:
                    //if (i > 0)
                    //{
                    //    if (i > 1)
                    //    {
                    //        lottoAntier = lottoAyer;
                    //    }
                    //    lottoAyer = lottoAyer;
                    //}
                    y[0] = (b[0] + x[0]) / 2;
                    y[1] = (b[1] + x[1]) / 2;
                    y[2] = (b[2] + x[2]) / 2;
                    //gl.glColor3f(0.0f, 1.0f, 0); //VERDE
                    gl.glColor3f(lottoAntier, lottoHoy, lottoAyer);
                    //gl.glColor3f(lottoHoy, lottoAyer, lottoAntier);
                    gl.glVertex3fv(y);
                    x = y;
                    break;

                case 2:
                    //if (i > 0)
                    //{
                    //    if (i > 1)
                    //    {
                    //        lottoAntier = lottoHoy;
                    //    }
                    //    lottoAyer = lottoHoy;
                    //}
                    y[0] = (c[0] + x[0]) / 2;
                    y[1] = (c[1] + x[1]) / 2;
                    y[2] = (c[2] + x[2]) / 2;
                    //gl.glColor3f(0.0f, 0.0f, 1.0f); //AZUL
                    gl.glColor3f(lottoAyer, lottoAntier, lottoHoy);
                    //gl.glColor3f(lottoHoy, lottoAyer, lottoAntier);
                    gl.glVertex3fv(y);
                    x = y;
                    break;

                default:
                    break;
                }
            }

            gl.glEnd();

            // Forzar el dibujado de todo y cambiar el buffer de ser necesario
            gl.wglSwapBuffers(csgl12Control.GetHDC());
        }