Ejemplo n.º 1
0
        // Idem a Display
        private void glControl_Paint(object sender, PaintEventArgs e)
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            ///////////////////////////////////////////////////
            // Escena 3D
            this.Set3DEnv();

            //
            // Se corresponde se dibujan los componentes de la simulación
            if (this.escenaSimulando)
            {
                Gl.glMatrixMode(Gl.GL_MODELVIEW);
                Gl.glLoadIdentity();

                // Se modifica la cámara para que recorra los puntos de la cámara bspline
                if (camaraFija)
                {
                    Glu.gluLookAt(eye[0], eye[1], eye[2], at[0], at[1], at[2], up[0], up[1], up[2]);
                }
                else
                {
                    IList <PuntoFlotante> puntosPosicionCamara = vista.GetPuntosPosicionCamara();
                    Glu.gluLookAt(puntosPosicionCamara[escena.iteradorCurva % puntosPosicionCamara.Count].GetXFlotante(), puntosPosicionCamara[escena.iteradorCurva % puntosPosicionCamara.Count].GetYFlotante(), 10, 0, 0, 0, up[0], up[1], up[2]);
                }

                // Si corresponde se dibujan los ejes
                if (view_axis)
                {
                    Gl.glCallList(DL_AXIS);
                }
                // Se corresponde se dibuja la grilla
                if (view_grid)
                {
                    Gl.glCallList(DL_GRID);
                }

                // Se aplica escalado para pasar de las coordenadas del mundo a las coordenadas de la escena
                vista.EscalarMundoToEscena3D();

                // Se dibuja la rueda
                this.vista.DibujarRueda();

                // Se dibuja la superficie
                DrawSurface();

                Gl.glPopMatrix();
            }
            //
            ///////////////////////////////////////////////////
            // Panel 2D para la vista del camino de la camara.
            Gl.glLoadIdentity();
            this.SetPanelTopEnv();
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
            Glu.gluLookAt(0, 0, 0.5, 0, 0, 0, 0, 1, 0);
            Gl.glCallList(DL_AXIS2D_TOP);
            //
            this.vista.DibujarCamaraPath();
            //
            ///////////////////////////////////////////////////
            // Panel 2D para la vista del perfil del terreno.
            this.SetPanelHeightEnv();
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
            Glu.gluLookAt(0, 0, 0.5, 0, 0, 0, 0, 1, 0);
            Gl.glCallList(DL_AXIS2D_HEIGHT);
            //
            this.vista.DibujarTerreno2D();
            //
            ///////////////////////////////////////////////////
        }