protected override void OnRenderFrame(FrameEventArgs e) { OpenTK.Input.MouseState mouseState = OpenTK.Input.Mouse.GetState(); if (mouseState.IsButtonDown(OpenTK.Input.MouseButton.Left)) { xPosition -= e.Time; } if (mouseState.IsButtonDown(OpenTK.Input.MouseButton.Right)) { xPosition += e.Time; } GL.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); Matrix4 projMatrix = Matrix4.CreateOrthographicOffCenter(0, DEFAULT_WIDTH, 0, DEFAULT_HEIGHT, -1.0f, 1.0f); Matrix4 viewMatrix = Matrix4.Identity; Matrix4.CreateRotationZ((float)RotationAngle, out Matrix4 tempMatrix); Matrix4.CreateTranslation((float)xPosition * 200, -50.0f, 0.0f, out Matrix4 tempMatrix2); foreach (var obj in GameObjects) { Matrix4 mvp = tempMatrix2 * tempMatrix * obj.ModelMatrix * viewMatrix * projMatrix; GL.UseProgram(MainShaderProgram.ProgramId); GlCustomUtil.Bind3dObject(obj); GL.UniformMatrix4(MainShaderProgram.MatrixShaderLocation, false, ref mvp); GL.DrawElements(PrimitiveType.Triangles, obj.Indices.Length, DrawElementsType.UnsignedInt, 0); var x = GL.GetError(); } SwapBuffers(); }
protected override void OnLoad(EventArgs e) { GameObjects = new List <BufferData> { Geometry.GetTriangle1(), Geometry.GetTriangle2() } .Select(x => GlCustomUtil.GeometryTo3dObject(x)) .ToList(); // TODO: Use the unbind function to clean up. Maybe have a class CustomGlContext. foreach (Object3d obj3d in GameObjects) { GlCustomUtil.Bind3dObject(obj3d); } MainShaderProgram = GlCustomUtil.CreateShaderProgram(); GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); GL.PatchParameter(PatchParameterInt.PatchVertices, 3); GL.Enable(EnableCap.Blend); GL.BlendEquation(BlendEquationMode.FuncAdd); GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); }