/// <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(); }
/// <summary> /// If Canvas is resizing /// </summary> private void OnResizeCanvas(object sender, EventArgs e) { GraphicEngine.ReInitGl(Width, Height); }
/// <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 }