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); }
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; } } }
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); }
/// <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(); }
/// <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); }
private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args) { OpenGL gl = args.OpenGL; // Initialise the scene. scene.Initialise(gl); }
/// <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!"); } }
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); }
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); }
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(); }
/// <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); }
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); }
private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args) { OpenGL gl = args.OpenGL; // Initialise the scene. scene.Initialise(gl); gl.Enable(OpenGL.GL_DEPTH_TEST); }
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); }
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() }
/// <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); }
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(); }
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); }
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(); }
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(); } }
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); }
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); }
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); }
/// <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 на определенный угол }
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; }
/// <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); }
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); }
/// <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(); */ }
/// <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; }
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); }
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; }
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); }
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(); }
/// <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)); }
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); }
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(); }
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; }
private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args) { }
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); }
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(); }
private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args) { OpenGL gl = args.OpenGL; gl.Enable(OpenGL.GL_DEPTH_TEST); }
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 }