private void SetupViewport() { if (!loaded) { return; } float aspect = 1.0f; try { int w = glControl1.Width; int h = glControl1.Height; GL.Viewport(0, 0, w, h); // Use all of the glControl painting area aspect = ((float)glControl1.Width) / ((float)glControl1.Height); SetAlpha(false); // start off with alpha off GL.Enable(EnableCap.CullFace); // enable culling of faces GL.CullFace(CullFaceMode.Back); // specify culling backfaces m_projection = OpenTK.Matrix4.CreatePerspectiveFieldOfView(0.55f, aspect, 1, 2000); m_axisProjection = OpenTK.Matrix4.CreatePerspectiveOffCenter(-2 * aspect + 0.3f, 0.3f, -0.3f, 1.7f, 1, 2000); m_modelView = OpenTK.Matrix4.LookAt(new OpenTK.Vector3(5, 0, -5), new OpenTK.Vector3(0, 0, 0), new OpenTK.Vector3(0, 0, 1)); GL.ShadeModel(ShadingModel.Smooth); // tell it to shade smoothly // properties of materials GL.Enable(EnableCap.ColorMaterial); // allow polys to have color float[] mat_specular = { 1.0f, 1.0f, 1.0f, 1.0f }; float[] mat_shininess = { 50.0f }; GL.Material(MaterialFace.Front, MaterialParameter.Specular, mat_specular); GL.Material(MaterialFace.Front, MaterialParameter.Shininess, mat_shininess); //set a color to clear the background GL.ClearColor(Color.LightBlue); // antialising lines GL.Enable(EnableCap.LineSmooth); //GL.Enable(EnableCap.PolygonSmooth); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.Hint(HintTarget.LineSmoothHint, HintMode.Nicest); //GL.Hint(HintTarget.PolygonSmoothHint, HintMode.Nicest); float[] res = new float[2]; GL.GetFloat(GetPName.SmoothLineWidthRange, res); // DebugLogger.Instance().LogInfo("Stencil depth: " + glControl1.GraphicsMode.Stencil.ToString()); // prepare texture buffer to save 3d rendring if (mColorBuffer == 0) { GL.GenTextures(1, out mColorBuffer); } GL.BindTexture(TextureTarget.Texture2D, mColorBuffer); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, Width, Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, IntPtr.Zero); // lighting if (firstTime) { GL.Enable(EnableCap.Lighting); GL.Enable(EnableCap.Light0); float[] light_position = { 1.0f, 1.0f, 1.0f, 0.0f }; GL.Light(LightName.Light0, LightParameter.Position, light_position); GL.Light(LightName.Light0, LightParameter.Diffuse, Color.LightGray); } // load gui elements if (firstTime) { gr2d.LoadTexture(global::UV_DLP_3D_Printer.Properties.Resources.cwtexture1_index); gr2d.LoadFont("Arial18", global::UV_DLP_3D_Printer.Properties.Resources.Arial18_metrics); LoadPluginGui(); //Visible = true; } Set3DView(); UVDLPApp.Instance().PerformPluginCommand("AfterThemingDone", true); firstTime = false; } catch (Exception ex) { String s = ex.Message; // the create perspective function blows up on certain ratios } }