Beispiel #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  del tamaño del control
            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 y la proyeccion
            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.gluLookAt(0, poscamara*Math.Sin(acamara), poscamara*Math.Cos(acamara), // pos camara
                         0, 0, 0, // pos objetivo
                         0, Math.Cos(acamara), -Math.Sin(acamara)); // orientación UP

            gl.glMatrixMode(GL.GL_MODELVIEW);
            gl.glLoadIdentity();

            //Aquí va tu dibujito chido
            //Espacio para guardar las mallas de las esferas
            gl.glTranslatef(0.0f, 0.0f, -10.0f);
            GLUTShapes obj = new GLUTShapes(gl);
            gl.glScalef(2.0f, 0.0f, 0.0f);
            gl.glColor3f(1.0f, 0.0f, 0.0f);
            obj.glutSolidCube(5.0);
            Vagon(gl);

            // Forzar el dibujado de todo y cambiar el buffer de ser necesario
            gl.wglSwapBuffers(csgl12Control.GetHDC());
        }
Beispiel #2
0
        //Metodo Paint
        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();//Pedimos el control de OpenGl

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

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

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

            //Asignar un viewport (el unico que maneja la vista fisica)
            gl.glViewport(0, 0, clientWidth, clientHeight); //Nos dice de que tamaño es la pantalla fisica, yo le digo la vista fisica tiene este tamaño

            //Limpiar la pantalla con un color de fondo
            gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //Limpia la pantalla blanco, trasparencia 10% opaco
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); //Limpia el Buffer de color y de profundidad (diferente del buffer de profundidad -> que sabe que esta atras de que)

            //Asignar la vista del modelo
            gl.glMatrixMode(GL.GL_PROJECTION); //Lo que voy a hacer ahorita modifica a la proyeccion unicamente
            gl.glLoadIdentity();
            double aspectRatio = 1.0;

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

            double verticalFieldOfViewAngle = 45.0;

            gl.gluPerspective //maneja la perspectivz
            (
                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
            );

            //Movimiento circular de la camara
            gl.gluLookAt(0, poscamara * Math.Sin(acamara), poscamara * Math.Cos(acamara),
                0, 0, 0,
                0, Math.Cos(acamara), -Math.Sin(acamara));

            gl.glMatrixMode(GL.GL_MODELVIEW); //VIsta de modelo
            gl.glLoadIdentity();

            //Aquí va tu dibujito chido

            //Material del tren vagon 1
            float[] sombratren = { 0.0f, 0.2f, 0.0f, 1.0f };
            float[] luztren = { 0.0f, 1.0f, 0.0f, 1.0f };
            float[] reflejotren = { 1.0f, 1.0f, 1.0f, 1.0f };
            float[] brillotren = { 0.0f, 0.0f, 0.0f, 1.0f };
            float intensidadbrillotren = 40.0f;//0 - 128
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, sombratren); //color a la sombra
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, luztren); //color a la luz
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, reflejotren); //color del reflejo
            gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, intensidadbrillotren); //intensidad del reflejo
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_EMISSION, brillotren); //color de luz emitida
            //Trayectoria en elipse del tren
            TrenX = (float)(Elipsea*Math.Cos(trayectoria));
            TrenY = (float)(Elipseb*Math.Sin(trayectoria));
            PendienteTan = ((Elipseb*TrenX)/(Elipsea*(Math.Sqrt(Math.Pow(Elipsea,2)-Math.Pow(TrenX,2)))));
            AnguloTan = (float)(Math.Abs((Math.Atan(PendienteTan)))*(180/Math.PI));
            if (TrenX > 0 && TrenY > 0)
                TrenA = (180 - AnguloTan);
            else if (TrenX < 0 && TrenY > 0)
                TrenA = (180 + AnguloTan);
            else if (TrenX < 0 && TrenY < 0)
                TrenA = (AnguloTan * (-1));
            else if (TrenX > 0 && TrenY < 0)
                TrenA = AnguloTan;
            //Debujar el vagon
            gl.glPushMatrix();//Condiciones iniciales
            gl.glTranslatef(TrenX, TrenY, 0.5f);
            gl.glRotatef(TrenA, 0.0f, 0.0f, 1.0f);
            gl.glScalef(2.0f, 1.0f, 1.0f);
            GLUTShapes shape = new GLUTShapes(gl);
            shape.glutSolidCube(1);

            //Luz Spot del tren
            gl.glTranslatef(0.5f, 0.0f, 0.0f);
            float[] light1_pos = { 0.0f, 0.0f, 0.0f, 1.0f }; //x,y,z, w  w=0 luz direccional, else posicional
            float[] light_Ka = { 1.0f, 1.0f, 1.0f, 1.0f };//white light
            float[] light_Kd = { 1.0f, 1.0f, 1.0f, 1.0f };//white light
            float[] light_Ks = { 1.0f, 1.0f, 1.0f, 1.0f };//white light
            float[] light_dir = {1.0f, 0.0f, 0.0f};
            gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, light1_pos); //posición de la luz
            gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, light_Ka); //color luz ambiental
            gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, light_Kd); //color de luz difusa
            gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, light_Ks); //color del brillo
            gl.glLightf(GL.GL_LIGHT1, GL.GL_SPOT_CUTOFF, 20.0f);
            gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPOT_DIRECTION, light_dir);
            gl.glLightf(GL.GL_LIGHT1, GL.GL_SPOT_EXPONENT, 40.0f); //0 - 128, 0 es pareja
            gl.glPopMatrix(); //Regresa a condiciones iniciales

            //Material del plano de abajo
            float[] sombratierra = { 0.545f, 0.255f, 0.005f, 1.0f };
            float[] luztierra = { 0.91f, 0.42f, 0.005f, 1.0f };
            float[] reflejotierra = { 1.0f, 1.0f, 1.0f, 1.0f };
            float[] brillotierra = { 0.0f, 0.0f, 0.0f, 1.0f };
            float intensidadbrillotierra = 40.0f;//0 - 128
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, sombratierra); //color a la sombra
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, luztierra); //color a la luz
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, reflejotierra); //color del reflejo
            gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, intensidadbrillotierra); //intensidad del reflejo
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_EMISSION, brillotierra); //color de luz emitida
            //Dibuja plano en el centro
            gl.glPushMatrix();
            gl.glTranslatef(-(plano_quads*plano_sizequads)/2,-(plano_quads*plano_sizequads)/2,0.0f);
            planoX = 0.0f;
            planoY = 0.0f;
            dibuja_plano(gl, plano_quads, plano_sizequads);
            gl.glPopMatrix();//Regresa a condiciones iniciales

            gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, sombratren); //color a la sombra
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, luztren); //color a la luz
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, reflejotren); //color del reflejo
            gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, intensidadbrillotren); //intensidad del reflejo
            gl.glMaterialfv(GL.GL_FRONT, GL.GL_EMISSION, brillotren); //color de luz emitida
            gl.glTranslatef(10.0f, 0.0f, 0.0f);
            dibuja_arbol(gl);

            trayectoria += 0.02f;
            // Forzar el dibujado de todo y cambiar el buffer de ser necesario
            gl.wglSwapBuffers(csgl12Control.GetHDC()); //Pasa del buffer a la pantalla (plancha cuando ya acabe esto) no cuando tu quieras
            //Es estoy listo cuando hagas el re-fresco para planchar en la pantalla
        }
Beispiel #3
0
 public void Vagon(GL gl)
 {
     float[] sombra = { 0.0f, 0.0f, 0.2f, 1.0f };
     float[] luz = { 0.0f, 0.0f, 1.0f, 1.0f };
     float[] reflejo = { 1.0f, 1.0f, 1.0f, 1.0f };
     float[] brillo = { 0.0f, 0.0f, 0.0f, 1.0f };
     float intensidadbrillo = 40.0f;//0 - 128
     gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, sombra); //color a la sombra
     gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, luz); //color a la luz
     gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, reflejo); //color del reflejo
     gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, intensidadbrillo); //intensidad del reflejo
     gl.glMaterialfv(GL.GL_FRONT, GL.GL_EMISSION, brillo); //color de luz emitida
     GLUTShapes obj = new GLUTShapes(gl);
     gl.glScalef(2.0f, 0.0f, 0.0f);
     obj.glutSolidCube(1.0);
 }