Example #1
0
        private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;	

            gl.ClearColor(0f, 0f, 0f, 1f);
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            gl.UseProgram(shaderProgram.ProgramObject);

            gl.Uniform3(toonUniforms.DiffuseMaterial, 0f, 0.75f, 0.75f);
            gl.Uniform3(toonUniforms.AmbientMaterial, 0.04f, 0.04f, 0.04f);
            gl.Uniform3(toonUniforms.SpecularMaterial, 0.5f, 0.5f, 0.5f);
            gl.Uniform1(toonUniforms.Shininess, 50f);
    
            float[] lightPosition = new float[4] { 0.25f, 0.25f, 1f, 0f };
            gl.Uniform3((int)toonUniforms.LightPosition, 1, lightPosition);
    
            gl.UniformMatrix4(toonUniforms.Projection, 1, false, projection.AsColumnMajorArrayFloat);
            gl.UniformMatrix4(toonUniforms.Modelview, 1, false, modelView.AsColumnMajorArrayFloat);
            gl.UniformMatrix3(toonUniforms.NormalMatrix, 1, false, normalMatrix.AsColumnMajorArrayFloat);
    
            gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER,vertexBuffer);
            gl.BindBuffer(OpenGL.GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
    
            gl.EnableVertexAttribArray(attrPosition);
            gl.EnableVertexAttribArray(attrNormal);
    
            gl.VertexAttribPointer(attrPosition, 3, OpenGL.GL_FLOAT, false, Marshal.SizeOf(typeof(Vertex)), IntPtr.Zero);
            int normalOffset = Marshal.SizeOf(typeof(Vertex));
            gl.VertexAttribPointer(attrNormal, 3, OpenGL.GL_FLOAT, false, Marshal.SizeOf(typeof(Vertex)), IntPtr.Add(new IntPtr(0), normalOffset));

            gl.DrawElements(OpenGL.GL_TRIANGLES, trefoilKnot.IndexCount, OpenGL.GL_UNSIGNED_SHORT, IntPtr.Zero);
        }
Example #2
0
        private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            //  Get the OpenGL instance.
            var gl = args.OpenGL;	

            //  Add a bit to theta (how much we're rotating the scene) and create the modelview
            //  and normal matrices.
            theta += 0.01f;
            scene.CreateModelviewAndNormalMatrix(theta);
            
            //  Clear the color and depth buffer.
            gl.ClearColor(0f, 0f, 0f, 1f);
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);
            
            //  Render the scene in either immediate or retained mode.
            switch (comboRenderMode.SelectedIndex)
            {
                case 0: 
                    {
                        scene.RenderRetainedMode(gl, checkBoxUseToonShader.IsChecked.Value); break;
                    }
                case 1:
                    {
                        axies.Render(gl, RenderMode.Design);
                        scene.RenderImmediateMode(gl); 
                        break;
                    }
            }
        }
Example #3
0
 private void openGLControl1_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
 {
     //  Get the OpenGL instance.
     //var gl = args.OpenGL;
     //gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
     this.scene.render();
 }
        //End

        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            gl.Enable(OpenGL.GL_DEPTH_TEST);

            float[] global_ambient = new float[] { 0.5f, 0.5f, 0.5f, 1.0f };
            float[] light0pos      = new float[] { 0.0f, 5.0f, 10.0f, 1.0f };
            float[] light0ambient  = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            float[] light0diffuse  = new float[] { 0.3f, 0.3f, 0.3f, 1.0f };
            float[] light0specular = new float[] { 0.8f, 0.8f, 0.8f, 1.0f };

            float[] lmodel_ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, global_ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, light0pos);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, light0ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, light0diffuse);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, light0specular);
            gl.Enable(OpenGL.GL_LIGHTING);
            gl.Enable(OpenGL.GL_LIGHT0);

            gl.ShadeModel(OpenGL.GL_SMOOTH);
        }
Example #5
0
        /// <summary>
        /// Handles the OpenGLDraw event of the OpenGLControl control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;	
            
            // Clear The Screen And The Depth Buffer
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            
            // Move Left And Into The Screen
            gl.LoadIdentity();		


            gl.Translate(0f, 0.0f, -6.0f);
            gl.Rotate(rotation, 1.0f, 0.0f, 0.0f);


            gl.DrawText3D(viewModel.FaceName3D, viewModel.FontSize3D,
                viewModel.Deviation3D, viewModel.Extrusion3D, viewModel.Text3D);

            rotation += 3.0f;

            //  Now render some text.
            gl.DrawText(viewModel.X, viewModel.Y, viewModel.R, 
                viewModel.G, viewModel.B, viewModel.FaceName, viewModel.FontSize,
                viewModel.Text);
            gl.Flush();
        }
        private void openGLControl1_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  If there aren't any shapes, create them.
            if (!shapes.Any())
            {
                CreateShapes();
            }

            //  Get the OpenGL instance.
            var gl = args.OpenGL;

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            gl.PointSize(2.0f);

            foreach (var shape in shapes)
            {
                gl.Color(shape.Red, shape.Green, shape.Blue);

                gl.Begin(BeginMode.LineLoop);
                shape.Points.ForEach(sp => gl.Vertex(sp.Position));
                gl.End();
            }

            Tick();
        }
Example #7
0
        /// <summary>
        /// Handles the OpenGLInitialized event of the OpenGLControl control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            gl.Enable(OpenGL.GL_DEPTH_TEST);

            float[] global_ambient = new float[] { 0.5f, 0.5f, 0.5f, 1.0f };
            float[] light0pos = new float[] { 0.0f, 5.0f, 10.0f, 1.0f };
            float[] light0ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            float[] light0diffuse = new float[] { 0.3f, 0.3f, 0.3f, 1.0f };
            float[] light0specular = new float[] { 0.8f, 0.8f, 0.8f, 1.0f };

            float[] lmodel_ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, global_ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, light0pos);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, light0ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, light0diffuse);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, light0specular);
            gl.Enable(OpenGL.GL_LIGHTING);
            gl.Enable(OpenGL.GL_LIGHT0);

            gl.ShadeModel(OpenGL.GL_SMOOTH);		
        }
Example #8
0
 private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
 {
     OpenGL gl = args.OpenGL;
     
     //  Initialise the scene.
     scene.Initialise(gl);
 }
Example #9
0
        /// <summary>
        /// OpenGL is drawing on screen
        /// </summary>
        /// <param name="sender">OpenGL control</param>
        /// <param name="args">OpenGL event arguments</param>
        private void OpenGLDraw(object sender, GLSG.OpenGLEventArgs args)
        {
            if (Keyboard.IsKeyDown(Key.W) && this.IsActive)
            {
                Vector3D look = this.camera.GetLookDirection();
                this.camera.Position = this.camera.Position + (look * (Keyboard.IsKeyDown(Key.LeftShift) ? 1.0 : 0.5));
                this.camera.SetLookDirection(look);
            }
            else if (Keyboard.IsKeyDown(Key.S) && this.IsActive)
            {
                Vector3D look = this.camera.GetLookDirection();
                this.camera.Position = this.camera.Position + (look * -(Keyboard.IsKeyDown(Key.LeftShift) ? 1.0 : 0.5));
                this.camera.SetLookDirection(look);
            }

            args.OpenGL.Clear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

            if (!this.IsMapNotLoading)
            {
                args.OpenGL.DrawText(5, 5, 1.0f, 1.0f, 1.0f, "Courier New", 12.0f, "Loading...");
            }
            else if (this.map != null)
            {
                this.camera.AspectRatio = ((GLControl)sender).ActualWidth / ((GLControl)sender).ActualHeight;
                this.camera.SetLookDirection(this.camera.GetLookDirection());
                this.camera.TransformProjectionMatrix(args.OpenGL);

                // Draw quads
                args.OpenGL.Begin(GL.GL_TRIANGLES);

                foreach (Powerslave.Plane plane in this.map.Planes
                         .Where(plane => !plane.Flags.HasFlag(Powerslave.PLaneFlags.Portal) && !plane.Flags.HasFlag(Powerslave.PLaneFlags.Invisible))
                         .OrderBy(plane => plane.Flags.HasFlag(Powerslave.PLaneFlags.Water))
                         .ThenByDescending(plane => MainWindow.GetDistance(this.camera.Position, plane, this.map)))
                {
                    plane.Draw(args.OpenGL, this.map, false, false);
                }

                args.OpenGL.End();
                args.OpenGL.Flush();

                // Draw Toggle planes (most are at the edges of triggers, also they are missing light level value)
                args.OpenGL.Begin(GL.GL_LINES);

                foreach (Powerslave.Plane plane in this.map.Planes.Where(plane => plane.Flags.HasFlag(Powerslave.PLaneFlags.Toggle)))
                {
                    plane.Draw(args.OpenGL, this.map, false, true);
                }

                args.OpenGL.End();
                args.OpenGL.Flush();

                args.OpenGL.DrawText(5, 5, 1.0f, 1.0f, 1.0f, "Courier New", 12.0f, Path.GetFileName(this.map.FileName));
            }
            else
            {
                args.OpenGL.DrawText(5, 5, 1.0f, 0.5f, 0.0f, "Courier New", 12.0f, "No map loaded!");
            }
        }
Example #10
0
    private void OpenGLControl_Resized(object sender, OpenGLEventArgs args)
    {
        //  Get the OpenGL instance.
        var gl = args.OpenGL;       
 
        //  Create the projection matrix for the screen size.
        scene.CreateProjectionMatrix(gl, (float)ActualWidth, (float)ActualHeight);
    }
Example #11
0
        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gla = args.OpenGL;

            args.OpenGL.Enable(OpenGL.GL_DEPTH_TEST);
            // gla.DepthFunc(OpenGL.GL_LEQUAL);
            gla.ShadeModel(OpenGL.GL_FLAT);
        }
Example #12
0
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            time = sw.ElapsedMilliseconds / 1000.0;

            //data = ((MainWindow)this.Owner).x;

            //double x1 = -data[0] * dots_per_meter;
            //double x2 = -(data[1] - 0.25) * dots_per_meter;

            //if (Math.Abs(x1-x1old) < 1e-6) {
            //    Console.WriteLine("{0} x1 same values", time);
            //}

            //if (Math.Abs(x2 - x2old) < 1e-6)
            //{
            //    Console.WriteLine("{0} x2 same values",time);
            //}

            //x1old = x1;
            //x2old = x2;
            double x1 = 0.0;
            double x2 = 100.0;
            //double x1 = 0.0;
            //double x2 = 0.0;
            //  Get the OpenGL instance.
            var gl = args.OpenGL;

            gl.Enable(OpenGL.GL_POLYGON_SMOOTH);

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            gl.LoadIdentity();

            gl.PushMatrix();
            //  Draw a coloured pyramid.
            gl.Translate(x1, x2, 0.0f);
            gl.Scale(20.0, 20.0, 20.0);
            gl.Begin(OpenGL.GL_TRIANGLES);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, 0.0f);
            gl.End();

            gl.PopMatrix();

            gl.PushMatrix();
            gl.Translate(500.0 * Math.Sin(2.0 * time), 0.0, 0.0f);
            gl.Scale(20.0, 20.0, 20.0);

            gl.Begin(OpenGL.GL_TRIANGLES);
            gl.Color(1.0f, 1.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, 0.0f);
            gl.End();
            gl.PopMatrix();
            gl.Flush();
        }
Example #13
0
 /// <summary>
 /// OpenGL is initialized
 /// </summary>
 /// <param name="sender">OpenGL control</param>
 /// <param name="args">OpenGL event arguments</param>
 private void OpenGLInitialized(object sender, GLSG.OpenGLEventArgs args)
 {
     args.OpenGL.ClearColor(0.1f, 0.1f, 0.1f, 1.0f);
     args.OpenGL.Enable(GL.GL_BLEND);
     args.OpenGL.Enable(GL.GL_CULL_FACE);
     args.OpenGL.CullFace(GL.GL_FRONT);
     args.OpenGL.BlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
     args.OpenGL.LineWidth(2.0f);
 }
Example #14
0
        private void OpenGlControlOpenGlDraw(object sender, OpenGLEventArgs args)
        {
            args.OpenGL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            args.OpenGL.LoadIdentity();
            args.OpenGL.Translate(0.0, -1.0, -6.0);

            _teapot.Draw(args.OpenGL, 14, 1.0, OpenGL.GL_FILL);
        }
Example #15
0
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            //  Initialise the scene.
            scene.Initialise(gl);

            gl.Enable(OpenGL.GL_DEPTH_TEST);
        }
Example #16
0
        public void Draw(object sender, OpenGLEventArgs args)
        {
            GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            // Add gradient background.
            SetVerticalGradientBackground(GL, new ColorF(255, 146, 134, 188), new ColorF(1f, 0, 1, 0));

            SCProgram.BindAll(GL);
        }
Example #17
0
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            gl.Begin(OpenGL.GL_LINES);
            gl.Color(1, 0, 0);
            gl.Vertex(0, 0);
            gl.Vertex(1, 1);
            //((DicomPanelViewModel)(this.DataContext)).Draw()
        }
Example #18
0
        /// <summary>
        /// Handles the OpenGLInitialized event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            //  TODO: Initialise OpenGL here.

            //  получаем ссылку на окно OpenGL
            OpenGL gl = openGLControl.OpenGL;

            //  Задаем цвет очистки экрана
            gl.ClearColor(0, 0, 0, 0);
        }
        /// <summary>
        /// Handles the OpenGLInitialized event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            //  TODO: Initialise OpenGL here.

            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            //  Set the clear color.
            gl.ClearColor(0, 0, 0, 0);
        }
Example #20
0
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            gl.Enable(OpenGL.GL_DEPTH_TEST);

            float[] global_ambient = new float[] { 0.5f, 0.5f, 0.5f, 1.0f };
            float[] light0pos = new float[] { 0.0f, 5.0f, 10.0f, 1.0f };
            float[] light0ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            float[] light0diffuse = new float[] { 0.3f, 0.3f, 0.3f, 1.0f };
            float[] light0specular = new float[] { 0.8f, 0.8f, 0.8f, 1.0f };

            float[] lmodel_ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

            gl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, global_ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, light0pos);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, light0ambient);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, light0diffuse);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, light0specular);
            gl.Enable(OpenGL.GL_LIGHTING);
            gl.Enable(OpenGL.GL_LIGHT0);

            gl.ShadeModel(OpenGL.GL_SMOOTH);		

            //  Create a vertex shader.
            VertexShader vertexShader = new VertexShader();
            vertexShader.CreateInContext(gl);
            vertexShader.SetSource(
                "void main()" + Environment.NewLine +
                "{" + Environment.NewLine +
                "gl_Position = ftransform();" + Environment.NewLine +
                "}" + Environment.NewLine);

            //  Create a fragment shader.
            FragmentShader fragmentShader = new FragmentShader();
            fragmentShader.CreateInContext(gl);
            fragmentShader.SetSource(
                "void main()" + Environment.NewLine +
                "{" + Environment.NewLine +
                "gl_FragColor = vec4(0.4,0.4,0.8,1.0);" + Environment.NewLine +
                "}" + Environment.NewLine);

            //  Compile them both.
            vertexShader.Compile();
            fragmentShader.Compile();

            //  Build a program.
            program.CreateInContext(gl);

            //  Attach the shaders.
            program.AttachShader(vertexShader);
            program.AttachShader(fragmentShader);
            program.Link();
        }
Example #21
0
        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            //  Set the clear color.
            gl.ClearColor(0, 0, 0, 0);

            openGLControl.FrameRate = 2400;
            //gl.DrawBuffer(OpenGL.GL_FRONT);
        }
Example #22
0
        private void OpenGLControl_Resized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = GLcontrol.OpenGL;

            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();
            gl.Viewport(0, 0, (int)Width, (int)Height);
            gl.Ortho(5, 5, 5, -1, 1, 1);
            gl.Perspective(90.0f, (double)Width / (double)Height, 1, 200.0);
            gl.LookAt(0, -1, -30, 0, 0, 0, 0, 1, 0);
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
        }
        private void openGLControl1_Resized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL instance.
            var gl = args.OpenGL;

            //  Create an orthographic projection.
            gl.MatrixMode(MatrixMode.Projection);
            gl.LoadIdentity();
            gl.Ortho(0, openGLControl1.ActualWidth, openGLControl1.ActualHeight, 0, -10, 10);

            //  Back to the modelview.
            gl.MatrixMode(MatrixMode.Modelview);
        }
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            initGL(gl);

            drawHand(gl);
            drawItem(gl, this.CUBE);
            drawAxis(gl);
            drawItem(gl, this.SPHERE);
            drawItem(gl, this.PYRAMID);
            gl.Flush();
        }
Example #25
0
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

          /* RenderContext& rc = GlobalRenderContext;

    glswInit();
    glswSetPath("../", ".glsl");
    glswAddDirectiveToken("GL3", "#version 130");*/

            vertexBuffer = trefoilKnot.CreateVertexNormalBuffer(gl);
            indexBuffer = trefoilKnot.CreateIndexBuffer(gl);

            //  Create a shader program.
            shaderProgram.CreateInContext(gl);

            //  Create the vertex program.
            vertexShader.CreateInContext(gl);
            vertexShader.LoadSource("PerPixelLightingVertex.glsl");
            vertexShader.Compile();

            var compileStatus = vertexShader.CompileStatus;
            var info = vertexShader.InfoLog;

            //  Create the fragment program.
            fragmentShader.CreateInContext(gl); 
            fragmentShader.LoadSource("PerPixelLightingFragment.glsl");
            fragmentShader.Compile();

            //  Attach the shaders to the program.
            shaderProgram.AttachShader(vertexShader);
            shaderProgram.AttachShader(fragmentShader);
            shaderProgram.Link();
    /*
#if defined(__APPLE__)
    rc.ToonHandle = BuildProgram("Toon.Vertex.GL2", "Toon.Fragment.GL2");
#else
    rc.ToonHandle = BuildProgram("Toon.Vertex.GL3", "Toon.Fragment.GL3");
#endif*/

            toonUniforms.Projection = gl.GetUniformLocation(shaderProgram.ProgramObject, "Projection");
            toonUniforms.Modelview = gl.GetUniformLocation(shaderProgram.ProgramObject, "Modelview");
            toonUniforms.NormalMatrix = gl.GetUniformLocation(shaderProgram.ProgramObject, "NormalMatrix");
            toonUniforms.LightPosition = gl.GetUniformLocation(shaderProgram.ProgramObject, "LightPosition");
            toonUniforms.AmbientMaterial = gl.GetUniformLocation(shaderProgram.ProgramObject, "AmbientMaterial");
            toonUniforms.DiffuseMaterial = gl.GetUniformLocation(shaderProgram.ProgramObject, "DiffuseMaterial");
            toonUniforms.SpecularMaterial = gl.GetUniformLocation(shaderProgram.ProgramObject, "SpecularMaterial");
            toonUniforms.Shininess = gl.GetUniformLocation(shaderProgram.ProgramObject, "Shininess");

            gl.Enable(OpenGL.GL_DEPTH_TEST);
        }
        private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            if (DebugMode)
            {
                //  Get the OpenGL object.
                OpenGL gl = openGLControl.OpenGL;

                //  Clear the color and depth buffer.
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

                //  Load the identity matrix.
                gl.LoadIdentity();
            }
        }
Example #27
0
        private void OpenGLControl_Resized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //openGLControl.FrameRate = 60;

            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            //  Create an orthographic projection.
            gl.MatrixMode(MatrixMode.Projection);
            gl.LoadIdentity();
            gl.Ortho(-openGLControl.ActualWidth / 2, openGLControl.ActualWidth / 2, -openGLControl.ActualHeight / 2, openGLControl.ActualHeight / 2, -10, 10);
            //  Back to the modelview.
            gl.MatrixMode(MatrixMode.Modelview);
        }
Example #28
0
        private void OpenGLControl_Resized(object sender, OpenGLEventArgs args)
        {
            //  Get the OpenGL instance.
            var gl = args.OpenGL;

            //  Create a projection matrix for the scene with the screen size.
            scene.CreateProjectionMatrix((float)ActualWidth, (float)ActualHeight);

            //  When we do immediate mode drawing, OpenGL needs to know what our projection matrix
            //  is, so set it now.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();
            gl.MultMatrix(scene.ProjectionMatrix.to_array());
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
        }
Example #29
0
        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = GLcontrol.OpenGL;

            gl.ClearColor(0, 0, 0, 0);
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();
            gl.Enable(OpenGL.GL_DEPTH_TEST);
            gl.Enable(OpenGL.GL_COLOR_MATERIAL);
            gl.Enable(OpenGL.GL_LIGHTING);
            gl.Enable(OpenGL.GL_LIGHT0);
            gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, new float[] { 3.0f, 40f, -58f, 3.3f });
            gl.Enable(OpenGL.GL_COLOR_MATERIAL);
            gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_CUTOFF, 180.0f);
        }
Example #30
0
        /// <summary>
        /// Handles the OpenGLDraw event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            int H;
            //  Получаемт ссылку на элемент управления OpenGL
            OpenGL gl = openGLControl.OpenGL;
            //получаем высоту окна
            H =  (int)this.Height;
            //вычитаем высоту текста
            H -= 65;
            //  Очищает буфер кадра
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  загружает нулевую матрицу мировых координат
            gl.LoadIdentity();
            gl.DrawText(0, H, 1, 1, 1, "", 20, "Score: 00000" );
            //  поворачивает сцену по оси Y на определенный угол
        }
Example #31
0
        private void OpenGLControl_Resized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            // Get the OpenGL instance.
            OpenGL gl = args.OpenGL;

            // Load and clear the projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();

            // Perform a perspective transformation
            gl.Perspective(45.0f, (float)gl.RenderContextProvider.Width /
                           (float)gl.RenderContextProvider.Height,
                           0.1f, 100.0f);

            // Load the modelview.
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
        }
        /// <summary>
        /// Handles the OpenGLDraw event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            //  Clear the color and depth buffer.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Load the identity matrix.
            gl.LoadIdentity();

            //  Rotate around the Y axis.
            gl.Rotate(rotation, 0.0f, 1.0f, 0.0f);

            //  Draw a coloured pyramid.
            gl.Begin(OpenGL.GL_TRIANGLES);
            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);
            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);
            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);
            gl.End();

            //  Nudge the rotation.
            rotation += 3.0f;
        }
Example #33
0
        /// <summary>
        /// Handles the OpenGLDraw event of the OpenGLControl control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;	
            
            // Clear The Screen And The Depth Buffer
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            
            // Move Left And Into The Screen
            gl.LoadIdentity();
            gl.Translate(0.0f, 0.0f, -6.0f);				


            gl.Rotate(rotation, 0.0f, 1.0f, 0.0f);

            Teapot tp = new Teapot();
            tp.Draw(gl, 14, 1, OpenGL.GL_FILL);

            rotation += 3.0f;
        }
        private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            //  Get the OpenGL instance.
            var gl = args.OpenGL;	

            //  Clear the color and depth buffer.
            gl.ClearColor(0f, 0f, 0f, 1f);
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Draw the axies.
            axies.Render(gl, RenderMode.Design);

            //  Render the trefoil knot.
            if (checkBoxUseCelShader.IsChecked == true)
                DrawTrefoilBuffers(gl);
                //DrawTrefoilCelShaded(gl);
            else
                DrawTrefoilVertices(gl);
        }
Example #35
0
        private void openGLCtrl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Create the vertices.
            vertices = GeometryGenerator.GenerateGeometry(Properties.Settings.Default.NumberOfVertices, 1f);

            //  Override with test values if needed.
            ProvideTestValues(vertices);

            vertexArrayValues = new float[vertices.Length * 3];
            uint counter = 0;

            for (uint i = 0; i < vertices.Length; i++)
            {
                vertexArrayValues[counter]   = vertices[i].X;
                vertexArrayValues[counter++] = vertices[i].Y;
                vertexArrayValues[counter++] = vertices[i].Z;
            }

            args.OpenGL.PointSize(3.0f);
        }
Example #36
0
        /// <summary>
        /// Handles the Resized event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_Resized(object sender, OpenGLEventArgs args)
        {
            //  TODO: Set the projection matrix here.

            //  получаем ссылку на окно OpenGL
            OpenGL gl = openGLControl.OpenGL;

            //  Задаем матрицу вида
            gl.MatrixMode(OpenGL.GL_PROJECTION);

            //  загружаем нулевую матрицу сцены
            gl.LoadIdentity();

            //  подгоняем окно просмотра под размеры окна OpenGL в форме
            gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 100.0);

            //  Задаем координаты камеры куда она будет смотреть
            gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0);

            //  задаем матрицу вида мдели
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
        }
        private void openGLCtrl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL instance that's been passed to us.
            OpenGL gl = args.OpenGL;

            //  Clear the color and depth buffers.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Reset the modelview matrix.
            gl.LoadIdentity();

            //  Move the geometry into a fairly central position.
            gl.Translate(0f, 0.0f, -6.0f);

            axies.Render(gl, RenderMode.Design);


            switch (this.drawingMechanismCombo.SelectedIndex)
            {
            case 0:
                RenderVertices_Immediate(args.OpenGL);
                break;

            case 1:
                RenderVertices_VertexArray(args.OpenGL);
                break;
            }

            //  Flush OpenGL.
            gl.Flush();

            /*
             * //  Clear the color and depth buffers.
             * gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
             *
             * //  Reset the modelview matrix.
             * gl.LoadIdentity(); */
        }
Example #38
0
        /// <summary>
        /// Handles the OpenGLDraw event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
        {
            const double a = 1;
            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            //  Clear the color and depth buffer.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Load the identity matrix.
            gl.LoadIdentity();

            //  Rotate around the Y axis.
            gl.Rotate(rotation, 0.0f, 1.0f, 0.0f);

            //  Draw a coloured pyramid.
            gl.Begin(OpenGL.GL_LINE_STRIP);

            for (double u = -3.5; u < 3.5; u += 0.1)
            {
                for (double v = 0; v < 2 * Math.PI; v += 0.1)
                {
                    var x = a * (1.0 / Math.Cosh(u)) * Math.Cos(v);
                    var y = a * (1.0 / Math.Cosh(u)) * Math.Sin(v);
                    var z = a * (u - Math.Tanh(u));

                    gl.Color(1.0f, 0.0f, 0.0f);
                    gl.Vertex(x, y, z);
                }
            }

            gl.End();

            //  Nudge the rotation.
            rotation += 3.0f;
        }
Example #39
0
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = GLcontrol.OpenGL;

            IntPtr quad = gl.NewQuadric();

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            gl.LoadIdentity();
            if (p_flag == true)
            {
                gl.LookAt(e_x, e_y, e_z, c_x, c_y, c_z, u_x, u_y, u_z);
            }
            if (rot_flag == true)

            {
                if (clock == true)
                {
                    gl.Rotate(rotation, 0.0f, 0.0f, 1.0f);
                }
                else
                {
                    gl.Rotate(rotation, 1.0f, 1.0f, 1.0f);
                }
            }

            gl.Translate(0.0f, 0.0f, 0.0f);
            if (kb.IsChecked == true || Z_o.IsChecked == true)
            {
                gl.Scale(40.3, 40.3, 40.3);
            }
            gl.Scale(0.3, 0.3, 0.3);
            gl.PushMatrix();
            gl.Color(1.0f, 1.0f, 0.0f);
            if (zil.IsChecked == true)
            {
                gl.Cylinder(quad, 50, 30, 30, 20, 20);
                clock = false;
            }
            if (sf.IsChecked == true)
            {
                gl.Sphere(quad, 50, 100, 100);
                clock = false;
            }
            if (ds.IsChecked == true)
            {
                gl.Disk(quad, 40, 50, 50, 50);
                clock = false;
            }
            if (ds_m.IsChecked == true)
            {
                gl.PartialDisk(quad, 40, 50, 50, 50, 50, 50);
                clock = false;
            }
            if (tp.IsChecked == true)
            {
                Teapot tp = new Teapot();
                tp.Draw(gl, 50, 51, OpenGL.GL_FILL);
                clock = false;
            }
            if (kb.IsChecked == true)
            {
                Cube cube = new Cube();
                cube.Render(gl, RenderMode.Render);
                clock = false;
            }
            if (Z_o.IsChecked == true)
            {
                clock = false;
                int   i, N = 20;
                float angleStep    = 360.0f / N;
                float angleCurrent = 0f;
                float Radius1      = 1.0f;
                for (i = 0; i < N; i++)
                {
                    angleCurrent = i * angleStep * 3.14f / 180;
                    gl.PushMatrix();
                    gl.Translate(Radius1 * Math.Sin(angleCurrent), 0, Radius1 * Math.Cos(angleCurrent));
                    gl.Sphere(quad, 0.3, 24, 24);
                    gl.PopMatrix();
                }
            }
            if (S_S.IsChecked == true)
            {
                clock = false;
                //рисуем солнце
                gl.Color(1.0, 1.0, 0.0);
                gl.Sphere(quad, 30, 50, 50);
                gl.Translate(60, 0, 0);
                // Рисуем планету
                gl.Color(0.0, 1.0, 0.0);
                gl.Sphere(quad, 10, 50, 50);
                gl.PopMatrix();
                gl.Flush();
            }
            if (O_O.IsChecked == true)
            {
                clock = false;
                gl.Color(0.7, 0.1, 0.0);
                gl.Sphere(quad, 30, 40, 40);
                gl.Translate(0, 0, 0);
                gl.Color(0.1, 0.3, 0.9);
                int   i, N = 20;
                float angleStep    = 360.0f / N;
                float angleCurrent = 0f;
                float Radius1      = 45.0f;
                for (i = 0; i < N; i++)
                {
                    angleCurrent = i * angleStep * 3.14f / 180;
                    gl.PushMatrix();
                    gl.Translate(Radius1 * Math.Sin(angleCurrent), 0, Radius1 * Math.Cos(angleCurrent));
                    gl.Sphere(quad, 9.9, 40, 40);
                    gl.PopMatrix();
                }
                gl.LookAt(1.1, 1.1, 1.5, 1.1, 1.1, 5.7, 1.1, 0, 0);
                for (i = 0; i < N; i++)
                {
                    angleCurrent = i * angleStep * 3.14f / 180;
                    gl.PushMatrix();
                    gl.Translate(Radius1 * Math.Sin(angleCurrent), 0, Radius1 * Math.Cos(angleCurrent));
                    gl.Sphere(quad, 9.9, 40, 40);
                    gl.PopMatrix();
                }
            }
            if (O_k.IsChecked == true)
            {
                clock = false;
                gl.LineWidth(2.5f);
                gl.Scale(50.3, 50.3, 50.3);
                gl.Begin(OpenGL.GL_LINES);
                gl.Color(1.0, 0.0, 0.0);
                gl.Vertex(-1, -1, 0); //х
                gl.Vertex(1, -1, 0);
                gl.Vertex(-1, 1, 0);  //у
                gl.Vertex(-1, -1, 0);
                gl.Vertex(-1, -1, 0); //z
                gl.Vertex(-1, -1, 2);
                gl.End();
            }
            if (kv.IsChecked == true)
            {
                clock = false;
                gl.MatrixMode(OpenGL.GL_MODELVIEW);
                gl.LoadIdentity();
                gl.PushMatrix();
                gl.Rotate(rotation, 0.0, 0.0, 1.0);
                gl.Color(1.0, 1.0, 1.0);
                gl.Rect(-20.0, -20.0, 20.0, 20.0);
                gl.PopMatrix();
            }
            if (asd.IsChecked == true)
            {
                clock = false;
                gl.LineWidth(3.5f);
                gl.Scale(20.3, 20.3, 20.3);
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
                gl.Rotate(rotation, 0.0, 0.0, 1.0);
                gl.Color(1.0, 0.0, 0.0);
                gl.Vertex(0, 0);
                gl.Vertex(0, 3);
                gl.Vertex(2, 2);
                gl.Vertex(4, 3);
                gl.Vertex(4, 0);
                gl.Vertex(3, 0);
                gl.Vertex(3, 1);
                gl.Vertex(1, 1);
                gl.Vertex(1, 0);
                gl.Vertex(0, 0);
                gl.End();
            }
            if (cl.IsChecked == true)
            {
                clock = false;
                gl.LineWidth(3.5f);
                gl.MatrixMode(OpenGL.GL_MODELVIEW);
                gl.LoadIdentity();
                gl.PushMatrix();
                gl.Rotate(rotation, 0.0, 0.0, 1.0);
                gl.Color(1.0, 1.0, 1.0);
                gl.Rect(-0.91, -20.9, 1.0, 1.0);
                gl.PopMatrix();
                gl.Color(0.0f, 1.0f, 0.0f);
                gl.Begin(OpenGL.GL_LINE_LOOP);
                for (int i = 0; i < 100; i++)
                {
                    double a = (float)i / 25.0f * 3.1415f * 2.0f;
                    gl.Vertex(Math.Cos(a) * 28.0f, Math.Sin(a) * 28.0f);
                }
                gl.End();
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.PushMatrix();
                gl.Vertex(-21, 0);
                gl.Vertex(-25, 0);
                gl.Vertex(-21, 3);
                gl.Vertex(-25, 6);
                gl.Vertex(-21, 6);
                gl.End();
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.Vertex(25, 0);
                gl.Vertex(21, 0);
                gl.Vertex(21, 3);
                gl.Vertex(25, 3);
                gl.Vertex(25, 6);
                gl.Vertex(21, 6);
                gl.Vertex(21, 3);
                gl.End();
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.Vertex(2, 25);
                gl.Vertex(1, 27);
                gl.Vertex(1, 23);
                gl.End();
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.Vertex(-1, 27);
                gl.Vertex(-3, 27);
                gl.Vertex(-1, 23);
                gl.Vertex(-3, 23);
                gl.End();
                gl.Begin(OpenGL.GL_LINE_STRIP);
                gl.Vertex(-1, -20);
                gl.Vertex(3, -20);
                gl.Vertex(3, -26);
                gl.Vertex(-1, -26);
                gl.Vertex(-1, -23);
                gl.Vertex(3, -23);
                gl.End();
            }
            gl.PopMatrix();
            rotation += Convert.ToSingle(sl.Value);
        }
Example #40
0
        public void Resized(object sender, OpenGLEventArgs args)
        {
            var control = sender as OpenGLControlJOG;

            MvpBuilder.Width = (int)control.ActualWidth;
            MvpBuilder.Height = (int)control.ActualHeight;

            MvpBuilder.BuildPerspectiveProjection();

            ProjectionMatrix = MvpBuilder.ProjectionMatrix;
        }
Example #41
0
        public void Init(object sender, OpenGLEventArgs args)
        {
            SceneControl = sender as OpenGLControlJOG;

            // Set up the view.
            MvpBuilder.FovRadians = (float)Math.PI / 2f; // Set FOV to 90°
            MvpBuilder.Far = 100f;
            MvpBuilder.Near = 0.01f;
            MvpBuilder.Width = (int)SceneControl.ActualWidth;
            MvpBuilder.Height = (int)SceneControl.ActualHeight;

            MvpBuilder.TranslationZ = -10;

            MvpBuilder.BuildPerspectiveProjection();
            MvpBuilder.BuildTurntableModelview();

            // Create a visible shader program.
            NmProgram = new NormalMaterialProgram(GL);
            NmProgram.LightPosition = new vec3(5, 10, 15);
            NormalMatrix = mat3.identity();

            // Create the hit test shader program.
            HtProgram = new HitTestProgram(GL);

            ProjectionMatrix = MvpBuilder.ProjectionMatrix;
            ModelviewMatrix = MvpBuilder.ModelviewMatrix;

            AddData(GL);

            GL.Enable(OpenGL.GL_DEPTH_TEST);

            GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
        }
Example #42
0
        public void Draw(object sender, OpenGLEventArgs args)
        {
            var scene = sender as OpenGLControlJOG;

            if (NmProgram.ChangedUniforms.Count == 0) // Prepare HitTest scene
            {
                // Prevent the image from updating, so that the hittest id's won't be visible to the user.
                if (HtProgram.ChangedUniforms.Count != 0)
                {
                    scene.RefreshImgSource = false;

                    GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
                    HtProgram.BindAll(GL);
                }
                else
                {
                    // Prevent blitting the image when nothing changed.
                    scene.BlitImage = false;
                }
            }
            else // Update the visual scene.
            {
                if (!scene.RefreshImgSource)
                    scene.RefreshImgSource = true;
                if (!scene.BlitImage)
                    scene.BlitImage = true;

                GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

                // Add gradient background.
                SetVerticalGradientBackground(GL, new ColorF(255, 146, 134, 188), new ColorF(1f, 0, 1, 0));

                NmProgram.BindAll(GL);
            }
        }
        /// <summary>
        /// When overridden in a derived class, is invoked whenever application code or 
        /// internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate"/>.
        /// </summary>
        public override void OnApplyTemplate()
        {
            //  Call the base.
            base.OnApplyTemplate();


            object parameter = null;

            if (RenderContextType == RenderContextType.NativeWindow)
            {
                var source = (HwndSource)PresentationSource.FromVisual(this);
                if (source != null) parameter = source.Handle;
                else RenderContextType = RenderContextType.FBO;
                // Fallback to FBO if we cannot get the window handle
            }

            //  Lock on OpenGL.
            lock (gl)
            {
                //  Create OpenGL.
                gl.Create(OpenGLVersion, RenderContextType, 1, 1, 32, parameter);
            }

            //  Create our fast event args.
            eventArgsFast = new OpenGLEventArgs(gl);

            //  Set the most basic OpenGL styles.
            gl.ShadeModel(SharpGL.OpenGL.GL_SMOOTH);
            gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            gl.ClearDepth(1.0f);
            gl.Enable(SharpGL.OpenGL.GL_DEPTH_TEST);
            gl.DepthFunc(SharpGL.OpenGL.GL_LEQUAL);
            gl.Hint(SharpGL.OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, SharpGL.OpenGL.GL_NICEST);

            //  Fire the OpenGL initialised event.
            var handler = OpenGLInitialized;
            if (handler != null)
                handler(this, eventArgsFast);

            //  DispatcherTimer setup
            timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 0, 0, (int)(1000.0 / FrameRate));
            timer.Start();
        }
Example #44
0
        /// <summary>
        /// When overridden in a derived class, is invoked whenever application code or 
        /// internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate"/>.
        /// </summary>
        public override void OnApplyTemplate()
        {
            //  Call the base.
            base.OnApplyTemplate();

            //  Lock on OpenGL.
            lock (gl)
            {
                //  Create OpenGL.
                gl.Create(OpenGLVersion, RenderContextType, 1, 1, 32, null);
            }

            //  Create our fast event args.
            eventArgsFast = new OpenGLEventArgs(gl);

            //  Set the most basic OpenGL styles.
            gl.ShadeModel(OpenGL.GL_SMOOTH);
            gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            gl.ClearDepth(1.0f);
            gl.Enable(OpenGL.GL_DEPTH_TEST);
            gl.DepthFunc(OpenGL.GL_LEQUAL);
            gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);

            //  Fire the OpenGL initialised event.
            var handler = OpenGLInitialized;
            if (handler != null)
                handler(this, eventArgsFast);

            timer.Interval = new TimeSpan(0, 0, 0, 0, (int)(1000.0 / FrameRate));
        }
Example #45
0
        public void Init(object sender, OpenGLEventArgs args)
        {
            SceneControl = sender as OpenGLControlJOG;

            // Set up the view.
            MvpBuilder.FovRadians = (float)Math.PI / 2f; // Set FOV to 90°
            MvpBuilder.Far = 100f;
            MvpBuilder.Near = 0.01f;
            MvpBuilder.Width = (int)SceneControl.ActualWidth;
            MvpBuilder.Height = (int)SceneControl.ActualHeight;

            MvpBuilder.TranslationZ = -10;

            MvpBuilder.BuildPerspectiveProjection();
            MvpBuilder.BuildTurntableModelview();

            // Create a shader program.
            SCProgram = new LinesProgram(GL);
            ProjectionMatrix = MvpBuilder.ProjectionMatrix;
            ModelviewMatrix = MvpBuilder.ModelviewMatrix;

            AddData(GL);

            GL.Enable(OpenGL.GL_DEPTH_TEST);

            GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
        }
Example #46
0
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            // Load and clear the projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();
            if (settings.fieldOfView < 3)
            {
                gl.Perspective(60.0, (float)gl.RenderContextProvider.Width /
                               (float)gl.RenderContextProvider.Height,
                               0.1f, 100.0f);
            }
            else
            {
                gl.Perspective(settings.fieldOfView, (float)gl.RenderContextProvider.Width /
                               (float)gl.RenderContextProvider.Height,
                               0.1f, 100.0f);
            }


            // Load the modelview.
            gl.MatrixMode(OpenGL.GL_MODELVIEW);

            //gl.Enable(OpenGL.GL_CULL_FACE); // cull face
            //gl.CullFace(OpenGL.GL_BACK); // cull back face
            //gl.FrontFace(OpenGL.GL_CW); // GL_CCW for counter clock-wise
            //  Clear the color and depth buffers.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
            //Set window background color
            if (settings.backgroundColor == null)
            {
                gl.ClearColor(0.2f, 0.2f, 0.2f, 1);
            }
            else
            {
                gl.ClearColor((float)settings.backgroundColor.R, (float)settings.backgroundColor.G, (float)settings.backgroundColor.B, 1f);
            }

            //  Reset the modelview matrix.

            //gl.LoadIdentity();

            //Move, Scale and Rotate Object
            #region sceneTransformations


            xy = Mouse.GetPosition(GLControl);

            gl.PointSize(5);
            gl.Hint(OpenGL.GL_POINT_SMOOTH_HINT, OpenGL.GL_NICEST);
            gl.Enable(OpenGL.GL_POINT_SMOOTH);

            //gl.LineWidth(2);
            if (Keyboard.IsKeyDown(Key.LeftShift) && Mouse.MiddleButton == MouseButtonState.Pressed)
            {
                GLControl.Cursor = Cursors.ScrollAll;
                YTrans           = -((xy.Y - 425) / 200) + yTransOffset;
                YTrans           = Math.Round(YTrans, 5);
                XTrans           = ((xy.X - 810) / 200) + xTransOffset;
                XTrans           = Math.Round(XTrans, 5);
                gl.Translate(XTrans, YTrans, tempScale - 14);
                debug.Text = XTrans.ToString();
            }
            else
            {
                GLControl.Cursor = Cursors.Arrow;
                xTransOffset     = XTrans;
                yTransOffset     = YTrans;
                gl.Translate(XTrans, YTrans, tempScale - 14);
            }


            //gl.Scale(tempScale, tempScale, tempScale);
            #region keyboardInputs
            if (Keyboard.IsKeyDown(Key.D) & Keyboard.IsKeyDown(Key.A) == false)
            {
                rotatey += 1;
            }
            if (Keyboard.IsKeyDown(Key.A) & Keyboard.IsKeyDown(Key.D) == false)
            {
                rotatey += -1;
            }
            if (Keyboard.IsKeyDown(Key.W) & Keyboard.IsKeyDown(Key.S) == false)
            {
                rotatex += -1;
            }
            if (Keyboard.IsKeyDown(Key.S) & Keyboard.IsKeyDown(Key.W) == false)
            {
                rotatex += 1;
            }
            #endregion
            //debug.Text = rotatex.ToString() + " " + rotatey.ToString();
            gl.Rotate(rotatex, 1, YRot, ZRot);
            gl.Rotate(rotatey, XRot, 1, ZRot);



            #endregion


            #region rendering


            foreach (Shapes shape in shapes)
            {
                if (shape.IsVisible() == true)
                {
                    if (ScenePanel.XRayOn)
                    {
                        shape.DrawWire();
                        if (shape.ToString() == "OpenSharpGL.Axies" || shape.ToString() == "OpenSharpGL.Grid" || shape.ToString() == "OpenSharpGL.Arrows" || shape.ToString() == "OpenSharpGL.Rings" || shape.ToString() == "OpenSharpGL.LightPoint")
                        {
                            shape.Draw();
                        }
                    }
                    else
                    {
                        shape.Draw();
                        if (ScenePanel.WireframeOn == true)
                        {
                            shape.DrawWire();
                        }
                    }
                }
                //shape.Draw();
            }

            if (primToRender == "Sphere")
            {
                gl.Begin(OpenGL.GL_QUADS);
                Shapes circle = new Circle(gl, 4, 8);
                gl.End();
            }

            #endregion
            //  Reset the modelview.
            gl.LoadIdentity();

            //  Flush OpenGL.
            gl.Flush();
        }
Example #47
0
        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL instance that's been passed to us.
            OpenGL gl = args.OpenGL;

            //  Clear the color and depth buffers.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Reset the modelview matrix.
            gl.LoadIdentity();

            //  Move the geometry into a fairly central position.
            gl.Translate(0.0f, 0.0f, -6.0f);

            //  Draw a pyramid. First, rotate the modelview matrix.
            gl.Rotate(rotatePyramid, 0.0f, 1.0f, 0.0f);

            //  Start drawing discrete points
            gl.Begin(OpenGL.GL_POINTS);

            ICP.PointRGB[] allPoints = pcdl.getAllPoints();

            for (int i = 0; i < pcdl.size(); i++)
            {
                gl.Vertex(allPoints[i].point.X, allPoints[i].point.Y, allPoints[i].point.Z);
                gl.Color(0.0f, 1.0f, 0.0f);
            }

            //Start looping over all points from the point cloud.

            /*gl.Color(1.0f, 0.0f, 0.0f);
             * gl.Vertex(0.0f, 1.0f, 0.0f);
             * gl.Color(0.0f, 1.0f, 0.0f);
             * gl.Vertex(-1.0f, -1.0f, 1.0f);
             * gl.Color(0.0f, 0.0f, 1.0f);
             * gl.Vertex(1.0f, -1.0f, 1.0f);*/

            if (pcdl != null)
            {
                System.Diagnostics.Debug.WriteLine("Size of pc: " + pcdl.size());
            }

            /*gl.Color(1.0f, 0.0f, 0.0f);
             * gl.Vertex(0.0f, 1.0f, 0.0f);
             * gl.Color(0.0f, 0.0f, 1.0f);
             * gl.Vertex(1.0f, -1.0f, 1.0f);
             * gl.Color(0.0f, 1.0f, 0.0f);
             * gl.Vertex(1.0f, -1.0f, -1.0f);
             *
             * gl.Color(1.0f, 0.0f, 0.0f);
             * gl.Vertex(0.0f, 1.0f, 0.0f);
             * gl.Color(0.0f, 1.0f, 0.0f);
             * gl.Vertex(1.0f, -1.0f, -1.0f);
             * gl.Color(0.0f, 0.0f, 1.0f);
             * gl.Vertex(-1.0f, -1.0f, -1.0f);
             *
             * gl.Color(1.0f, 0.0f, 0.0f);
             * gl.Vertex(0.0f, 1.0f, 0.0f);
             * gl.Color(0.0f, 0.0f, 1.0f);
             * gl.Vertex(-1.0f, -1.0f, -1.0f);
             * gl.Color(0.0f, 1.0f, 0.0f);
             * gl.Vertex(-1.0f, -1.0f, 1.0f);*/
            gl.PointSize(10.0f);
            gl.End();

            //  Flush OpenGL.
            gl.Flush();

            //  Rotate the geometry a bit.
            rotatePyramid += 3.0f;
        }
Example #48
0
 private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
 {
 }
Example #49
0
        private void Initialized(object sender, OpenGLEventArgs args)
        {
            Context = args.OpenGL;

            Target = new RenderTarget(Context);

            CreateBasicShader(Context);
            CreateBasicLighting(Context, new Vector4(0, 10, 0, 1));

            Context.Enable(OpenGL.GL_DEPTH_TEST);
            Context.Enable(OpenGL.GL_TEXTURE_2D);
            Context.DepthFunc(OpenGL.GL_LEQUAL);
            //Context.CullFace(OpenGL.GL_BACK);
            //Context.FrontFace(OpenGL.GL_CCW);
            //Context.Enable(OpenGL.GL_CULL_FACE);

            Sphere sphere = new Sphere(70, 0, 0, 0);
            //RenderObjects.Add(sphere);

            RendererGL.Cube cube = new RendererGL.Cube(7);
            RenderObjects.Add(cube);

            Teapot teapot = new Teapot();
            SceneElements.Add(teapot);
        }
Example #50
0
        private void Draw(object sender, OpenGLEventArgs args)
        {
            Context.ClearDepth(1);
            Context.ClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            Context.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            Context.LoadIdentity();
            Context.Rotate(rotation, 0.2f, 1.0f, 0.6f);

            foreach (var renderObject in RenderObjects)
            {
                renderObject.Draw(Target);
            }

            foreach (var element in SceneElements)
            {
                element.Draw(Target.Context, 14, 1, OpenGL.GL_FILL);
            }

            long deltaTicks = DateTime.Now.Ticks - ticks;
            rotation = (rotation + scale * deltaTicks) % 360.0f;
            ticks = DateTime.Now.Ticks;
        }
        /// <summary>
        /// When overridden in a derived class, is invoked whenever application code or 
        /// internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate"/>.
        /// </summary>
        public override void OnApplyTemplate()
        {
            //  Call the base.
            base.OnApplyTemplate();

            //  Lock on OpenGL.
            lock (gl)
            {
                //  Create OpenGL.
                gl.Create(OpenGLVersion, RenderContextType, 1, 1, 32, null);
            }

            //  Create our fast event args.
            eventArgsFast = new OpenGLEventArgs(gl);

            /// ---- This does not belong here! If user would want this, he'll set it himself. ----
            //  Set the most basic OpenGL styles.
            //gl.ShadeModel(OpenGL.GL_SMOOTH);
            //gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            //gl.ClearDepth(1.0f);
            //gl.Enable(OpenGL.GL_DEPTH_TEST);
            //gl.DepthFunc(OpenGL.GL_LEQUAL);
            //gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);
            /// ---------------------------------------------------------------------------------------------------------------

            //  Fire the OpenGL initialised event.
            var handler = OpenGLInitialized;
            if (handler != null)
                handler(this, eventArgsFast);

            //  DispatcherTimer setup
            timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 0, 0, (int)(1000.0 / FrameRate));
            timer.Start();
        }
Example #52
0
        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            gl.Enable(OpenGL.GL_DEPTH_TEST);
        }
Example #53
0
 private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
 {
     //  Enable the OpenGL depth testing functionality.
     args.OpenGL.Enable(OpenGL.GL_DEPTH_TEST);
 }
        public void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;

            // Clear The Screen And The Depth Buffer
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            Render3D(gl);
            DrawMovingGridLines(gl, ball);
            DrawArena(gl);

            //Initialize Variables of Players
            while (!initialized)
            {
                p1Paddle.topLimit    = UpperBoundary.Position.y - UpperBoundary.Scale.y;
                p1Paddle.bottomLimit = LowerBoundary.Position.y + LowerBoundary.Scale.y;
                p1Paddle.KeyUp       = playerOneUp;
                p1Paddle.KeyDown     = playerOneDown;
                p2Paddle.topLimit    = UpperBoundary.Position.y - UpperBoundary.Scale.y;
                p2Paddle.bottomLimit = LowerBoundary.Position.y + LowerBoundary.Scale.y;
                p2Paddle.KeyUp       = playerTwoUp;
                p2Paddle.KeyDown     = playerTwoDown;
                initialized          = true;
            }

            //Start main music
            if (!isStartMusPlayed)
            {
                waveOutDevice.Init(odysseyMus);
                waveOutDevice.Play();
                isStartMusPlayed = true;
            }
            else
            {
                //waveOutDevice.Stop();
                //audioFileReader.Dispose();
                //waveOutDevice.Dispose();
            }

            //Start
            #region Main
            if (isGameStarted && !isOptionMenuOpen && !isGameOver)
            {
                //Ball is not moving
                if (!ball.isBallPlayed)
                {
                    ball.Reset();
                    ball.Position = new Vector3(0, 0, 0);
                    ball.ApplyForce(new Vector3(1.4f * didPlayer1Scored, 1.4f, 0));

                    p1Paddle.Position.y *= 0;
                    p2Paddle.Position.y *= 0;
                    ball.isBallPlayed    = true;
                    isScoredAlready      = false;
                    resetCounter         = 30;
                }
                else
                {
                    ball.Play();
                    ball.SpeedUp(120);
                    angleRandom = (float)Randomizer.Generate(-angleDeviation, angleDeviation);
                    ball.AddTrails(gl, isOptionMenuOpen);
                    ball.AddExplosion(gl, maxVerticalBorder, UpperBoundary, LowerBoundary, isOptionMenuOpen);

                    //Scoring
                    if ((ball.Position.x < p1Paddle.Position.x - scoringLine) && (resetCounter > 0))
                    {
                        //Start reset counter
                        isResetOngoing = true;
                        //Score once
                        if (!isScoredAlready)
                        {
                            scoredSound.Play();
                            player2Score++;
                            isScoredAlready  = true;
                            didPlayer1Scored = -1;
                        }
                    }

                    //Reached behind player 2
                    if ((ball.Position.x > p2Paddle.Position.x + scoringLine) && (resetCounter > 0))
                    {
                        isResetOngoing = true;
                        if (!isScoredAlready)
                        {
                            scoredSound.Play();
                            player1Score++;
                            isScoredAlready  = true;
                            didPlayer1Scored = 1;
                        }
                    }
                }
            }
            //Winning check
            if ((player1Score >= winningScore) || (player2Score >= winningScore))
            {
                isGameOver         = true;
                ball.enabledUpdate = false;
            }
            #endregion

            #region Reset Code
            if (isResetOngoing)
            {
                resetCounter--;
                if (resetCounter <= 0)
                {
                    ball.Velocity    *= 0;
                    ball.isBallPlayed = false;
                    isResetOngoing    = false;
                }
            }
            #endregion

            #region Controls, Movement and AI
            //Before Game starts controls
            if (!isGameStarted)
            {
                //Start
                if (Keyboard.IsKeyDown(startKey))
                {
                    startSound.Play();
                    isGameStarted = true;
                }
                //Toggle Player''s AI. Only Player 2 starts as AI
                p1Paddle.isAi = (Keyboard.IsKeyDown(player1Enable)) ? true : false;
                p2Paddle.isAi = (Keyboard.IsKeyDown(player2Enable)) ? false : true;
            }
            else
            {
                //Option Menu. Open the Menu, Stop ball from moving, reduce music volume
                isOptionMenuOpen       = Keyboard.IsKeyToggled(pauseKey) ? true : false;
                ball.enabledUpdate     = Keyboard.IsKeyToggled(pauseKey) ? false : true;
                p1Paddle.enabledUpdate = Keyboard.IsKeyToggled(pauseKey) ? false : true;
                p2Paddle.enabledUpdate = Keyboard.IsKeyToggled(pauseKey) ? false : true;
                waveOutDevice.Volume   = Keyboard.IsKeyToggled(pauseKey) ? 0.5f : 1.0f;
            }
            //Game Over and Restart
            if (isGameOver && Keyboard.IsKeyDown(restart))
            {
                isGameOver   = false;
                player1Score = 0;
                player2Score = 0;
            }
            //Quit Game
            if (Keyboard.IsKeyDown(playerOneQuitKey) || Keyboard.IsKeyDown(playerTwoQuitKey))
            {
                Environment.Exit(0);
            }
            //Test Toggle
            isTestToggled = (Keyboard.IsKeyToggled(testKey)) ? true : false;

            //Enable Player Paddle Controls if optionmenu is not open and game hasn't started
            p1Paddle.EnableControl(((!isOptionMenuOpen) && (isGameStarted)), ball, p1Paddle.isAi);
            p2Paddle.EnableControl(((!isOptionMenuOpen) && (isGameStarted)), ball, p2Paddle.isAi);

            #endregion

            #region Ball Collision
            //Ball collided with top or bottom plus safety checks
            if (ball.HasCollidedWith(UpperBoundary) || (ball.HasCollidedWith(LowerBoundary)))
            {
                wallHitSound.Play();
                ball.Position.y = ball.HasCollidedWith(UpperBoundary) ? ball.Position.y - ball.Scale.y : ball.Position.y + ball.Scale.y;
                ball.Velocity.y = -ball.Velocity.y;
            }

            //Ball collision for Player 1
            if (ball.HasCollidedWith(p1Paddle))
            {
                if (isSoundEnabled)
                {
                    paddleHitSound.Play();
                }
                //Allowable angle is (0 - 89)
                ball.ChangeAngle(0 + (10 * (ball.Position.y - p1Paddle.Position.y)) + angleRandom);
                ball.Color = p1Paddle.Color + lighterColor;
            }

            //Ball Collision for Player 2 Paddle
            if (ball.HasCollidedWith(p2Paddle))
            {
                if (isSoundEnabled)
                {
                    paddleHitSound.Play();
                }
                //Allowabled angle is(91 - 269)
                ball.ChangeAngle(180 - (10 * (ball.Position.y - p2Paddle.Position.y)) + angleRandom);
                ball.Color = p2Paddle.Color + lighterColor;
            }
            #endregion

            #region Text and Menus
            //Game Screen
            gl.DrawText((int)Width / 2 - 65, (int)Height / 2 - 340, 1.0f, 0.3f, 0.3f, "Courier", 60, "" + player1Score);
            gl.DrawText((int)Width / 2, (int)Height / 2 - 340, 0.3f, 0.3f, 1.0f, "Courier", 60, "" + player2Score);

            if (p1Paddle.isAi)
            {
                gl.DrawText(50, (int)Height / 2 + 230, 1.0f, 0.3f, 0.3f, "Courier", 20, "AI");
            }
            else
            {
                gl.DrawText(50, (int)Height / 2 + 230, 1.0f, 0.3f, 0.3f, "Courier", 20, "Player 1");
            }

            if (p2Paddle.isAi)
            {
                gl.DrawText((int)Width - 100, (int)Height / 2 + 230, 0.3f, 0.3f, 1.0f, "Courier", 20, "AI");
            }
            else
            {
                gl.DrawText((int)Width - 200, (int)Height / 2 + 230, 0.3f, 0.3f, 1.0f, "Courier", 20, "Player 2");
            }

            //Start Screen
            if (!isGameStarted)
            {
                gl.LoadIdentity();

                StartMenu.DrawSquare(gl);
                gl.DrawText((int)Width / 2 - ((int)(menuSize[0] * cons) * menuText[0].Length), (int)Height / 2 + 60, 0.5f, 1.0f, 0.5f, "Courier New", menuSize[0], menuText[0]);
                gl.DrawText((int)Width / 2 - ((int)(menuSize[1] * cons) * menuText[1].Length), (int)Height / 2 - 30, 1.0f, 1.0f, 1.0f, "Courier New", menuSize[1], menuText[1]);
                gl.DrawText((int)Width / 2 - ((int)(menuSize[2] * cons) * menuText[2].Length), (int)Height / 2 - 140, 1.0f, 1.0f, 1.0f, "Courier New", menuSize[2], menuText[2]);
                if (!p2Paddle.isAi)
                {
                    //Player 2 Enabled
                    gl.DrawText((int)Width / 2 - ((int)(menuSize[3] * cons) * menuText[3].Length), (int)Height / 2 - 160, 0.3f, 0.3f, 1.0f, "Courier New", menuSize[3], menuText[3]);
                }
                else
                {
                    gl.DrawText((int)Width / 2 - ((int)(menuSize[4] * cons) * menuText[4].Length), (int)Height / 2 - 160, 1.0f, 0.3f, 0.3f, "Courier New", menuSize[4], menuText[4]);
                }
            }

            //Option Menu
            if (isOptionMenuOpen)
            {
                gl.LoadIdentity();
                gl.Translate(0.0f, .0f, -150.0f);
                OptionMenu.DrawSquare(gl);
                Triangle.DrawTriangle(gl);
                //Triangle.Position = new Vector3(-25.0f, 0, commonZ + 12.0f);
                gl.DrawText((int)Width / 2 - ((int)(40.0f * cons) * optionTitle.Length), (int)Height / 2 + 90, 1.0f, 1.0f, 1.0f, "Courier New", 40.0f, optionTitle);

                for (int i = 0; i < optionText.GetLength(0); i++)
                {
                    gl.DrawText((int)Width / 2 - 200, (int)Height / 2 + 30 - (30 * i), 1.0f, 1.0f, 1.0f, "Courier New", optionSize[i], "" + optionText[i]);
                }
                //Moving down the menu cursor
                if (Keyboard.IsKeyDown(playerOneDown))
                {
                    indexSelected = (indexSelected < optionText.GetLength(0)) ? indexSelected + 1 : 1;
                }
                //Moving up the menu cursor
                if (Keyboard.IsKeyDown(playerOneUp))
                {
                    indexSelected = (indexSelected > 1) ? indexSelected - 1 : optionText.GetLength(0);
                }

                Triangle.Position = new Vector3(-25.0f, 9 - (3.3f * indexSelected), 0 + 12.0f);
            }

            //Results Menu
            if (isGameOver)
            {
                gl.LoadIdentity();
                gl.Translate(0.0f, .0f, -150.0f);
                ResultMenu.DrawSquare(gl);
                gl.DrawText((int)Width / 2 - ((int)(resultSize[0] * cons) * resultText[0].Length), (int)Height / 2 + 60, 0.5f, 1.0f, 0.5f, "Courier New", resultSize[0], resultText[0]);
                if (player1Score > player2Score)
                {
                    gl.DrawText((int)Width / 2 - ((int)(resultSize[1] * cons) * resultText[1].Length), (int)Height / 2 - 30, 1.0f, 0.3f, 0.3f, "Courier New", resultSize[1], resultText[1]);
                }
                else
                {
                    gl.DrawText((int)Width / 2 - ((int)(resultSize[2] * cons) * resultText[2].Length), (int)Height / 2 - 30, 0.3f, 0.3f, 1.0f, "Courier New", resultSize[2], resultText[2]);
                }
                gl.DrawText((int)Width / 2 - ((int)(resultSize[3] * cons) * resultText[3].Length), (int)Height / 2 - 140, 1.0f, 1.0f, 1.0f, "Courier New", resultSize[3], resultText[3]);
            }

            //Debug
            if (isTestToggled)
            {
                gl.DrawText(10, 50, 1.0f, 1.0f, 0, "Calibri", 10, "Angle Randomizer: " + angleRandom);
                gl.DrawText(10, 40, 1.0f, 1.0f, 0, "Calibri", 10, "Ball Position: " + ball.Position.x + ", " + ball.Position.y);
                gl.DrawText(10, 30, 1.0f, 1.0f, 0, "Calibri", 10, "Ball Vector Direction: " + ball.Velocity.x + ", " + ball.Velocity.y);
                gl.DrawText(10, 20, 1.0f, 0.0f, 0, "Calibri", 10, "Reset in: " + resetCounter);
                gl.DrawText(10, 10, 1.0f, 0.0f, 0, "Calibri", 10, "Speed: " + ball.Velocity.GetLength());
                gl.DrawText(10, 60, 1.0f, 1.0f, 0, "Calibri", 10, "Paddle 1 Pos: " + p1Paddle.Position);
            }
            #endregion
        }