Ejemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        public Mainform()
        {
            InitializeComponent();
            view.InitializeContexts();
            GraphicEngine.InitGl();
            GraphicEngine.ReInitGl(Width, Height);
            view.MouseDown  += new MouseEventHandler(MouseActionDown);
            view.MouseUp    += new MouseEventHandler(MouseActionUp);
            view.MouseWheel += new MouseEventHandler(MouseActionWheel);
            FullScreen();

            Cursor.Hide();
            sky.InitGLTexture();

            /*
             * Hier werden die nötigen Module eingebunden.
             * Manche müssen auch der Maussteuerung hinzugefügt werden,
             * um etwa Mausklicks auswerten zu können.
             */

// IMouseControlled + IFigures
            TangentialFunctions _Fkt = new TangentialFunctions();

            _Fkt.Enabled = true;
            _Fkt.Visible = true;
            MouseFigures.Add(_Fkt);
            Figures.Add(_Fkt);

            PlanetAdvanced3T _P3 = new PlanetAdvanced3T();

            MouseFigures.Add(_P3);
            Figures.Add(_P3);
// IFigures only
            Figures.Add(new ParticleField());
            foreach (IFigures f in Figures)
            {
                f.Cam = cam;
            }

            getActiveModule().Init();
            light = getActiveModule().getDefaultLight();

            thrOpenGL = new Thread(new ThreadStart(OpenGL_Start));
            thrOpenGL.Start();
        }
Ejemplo n.º 2
0
 /// <summary>
 /// If Canvas is resizing
 /// </summary>
 private void OnResizeCanvas(object sender, EventArgs e)
 {
     GraphicEngine.ReInitGl(Width, Height);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// If Canvas is painted
        /// </summary>
        private void OnPaintCanvas(object sender, PaintEventArgs e)
        {
            #region MouseControl

            double mx = (MouseX - MousePosition.X);
            double my = (MouseY - MousePosition.Y);
            if (Freelook) // Freelook oder Tangentialebene bewegen
            {
                cam.SetNewCameraPosition(mx, my);
            }
            else
            {
                bool check = false;

                if (mx != 0)
                {
                    foreach (IMouseControlled m in MouseFigures)
                    {
                        m.mx = mx;
                    }
                    check = true;
                }
                if (my != 0)
                {
                    foreach (IMouseControlled m in MouseFigures)
                    {
                        m.my = my;
                    }
                    check = true;
                }
                if (check)
                {
                    foreach (IMouseControlled m in MouseFigures)
                    {
                        m.updateObject();
                    }
                }
            }
            CenterMouse();
            #endregion

            GraphicEngine.BeginPaint();

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

            if (sky.DoDrawSkybox)
            {
                Gl.glDepthMask(false);
                // Tiefenpuffer aus (Skybox soll überzeichnet werden, also immer im Hintergrund sein.)
                sky.DrawSky(cam);
                // Skybox zeichnen
                Gl.glDepthMask(true);
                // Tiefenpuffer wieder an, alles andere hat eine Tiefe.
            }

            Gl.glLoadIdentity();

            cam.SetCamera();
            // Position und Richtung des Blickes einstellen.

            InitLight();
            // Lichtpositionen zeichnen.

            getActiveModule().Draw();
            // draw Objects

            Gl.glFlush();
            // in OpenGL wiedergeben
        }