#region --- License --- /* Copyright (c) 2006, 2007 Stefanos Apostolopoulos * See license.txt for license info */ #endregion #region --- Using Directives --- using System; using System.Collections.Generic; using System.Windows.Forms; using OpenTK; using OpenTK.OpenGL; using OpenTK.Platform; using Enums = OpenTK.OpenGL.GL.Enums; #endregion namespace Examples.Tutorial { public class T03_RotatingCube : OpenTK.GameWindow, IExample { #region --- Fields --- /// /// Denotes the cube rotation. /// float angle = 0.0f; #endregion #region --- Constructors --- public T03_RotatingCube() { CreateWindow(new DisplayMode(800, 600)); Context.MakeCurrent(); GL.ClearColor(0.1f, 0.1f, 0.5f, 0.0f); GL.Enable(Enums.EnableCap.DEPTH_TEST); this.OnResize(new ResizeEventArgs(this.Width, this.Height)); } #endregion #region Resize event handler /// /// Called when the user resizes the window. /// /// Contains the new width/height of the window. /// /// You want the OpenGL viewport to match the window. This is the place to do it! /// protected override void OnResize(OpenTK.Platform.ResizeEventArgs e) { base.OnResize(e); GL.Viewport(0, 0, e.Width, e.Height); double ratio = e.Width / (double)e.Height; GL.MatrixMode(Enums.MatrixMode.PROJECTION); GL.LoadIdentity(); Glu.Perspective(45.0, ratio, 1.0, 64.0); } #endregion #region OnUpdateFrame function /// /// Prepares the next frame for rendering. /// /// /// Place your control logic here. This is the place to respond to user input, /// update object positions etc. /// public override void OnUpdateFrame() { if (Keyboard[0][OpenTK.Input.Keys.Escape]) { this.Exit(); return; } if ((Keyboard[0][OpenTK.Input.Keys.LeftAlt] || Keyboard[0][OpenTK.Input.Keys.RightAlt]) && Keyboard[0][OpenTK.Input.Keys.Enter]) { Fullscreen = true; } GL.MatrixMode(Enums.MatrixMode.MODELVIEW); GL.LoadIdentity(); Glu.LookAt( 0.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); GL.Rotatef(angle, 0.0f, 1.0f, 0.0f); angle += 0.5f; } #endregion #region OnRenderFrame function /// /// Place your rendering code here. /// public override void OnRenderFrame() { GL.Clear(Enums.ClearBufferMask.COLOR_BUFFER_BIT | Enums.ClearBufferMask.DEPTH_BUFFER_BIT); DrawCube(); Context.SwapBuffers(); } #endregion #region private void DrawCube() private void DrawCube() { GL.Begin(GL.Enums.BeginMode.QUADS); GL.Color3(1.0f, 0.0f, 0.0f); GL.Vertex3(-1.0f, -1.0f, -1.0f); GL.Vertex3(-1.0f, 1.0f, -1.0f); GL.Vertex3(1.0f, 1.0f, -1.0f); GL.Vertex3(1.0f, -1.0f, -1.0f); GL.Color3(1.0f, 1.0f, 0.0f); GL.Vertex3(-1.0f, -1.0f, -1.0f); GL.Vertex3(1.0f, -1.0f, -1.0f); GL.Vertex3(1.0f, -1.0f, 1.0f); GL.Vertex3(-1.0f, -1.0f, 1.0f); GL.Color3(1.0f, 0.0f, 1.0f); GL.Vertex3(-1.0f, -1.0f, -1.0f); GL.Vertex3(-1.0f, -1.0f, 1.0f); GL.Vertex3(-1.0f, 1.0f, 1.0f); GL.Vertex3(-1.0f, 1.0f, -1.0f); GL.Color3(0.0f, 1.0f, 0.0f); GL.Vertex3(-1.0f, -1.0f, 1.0f); GL.Vertex3(1.0f, -1.0f, 1.0f); GL.Vertex3(1.0f, 1.0f, 1.0f); GL.Vertex3(-1.0f, 1.0f, 1.0f); GL.Color3(0.0f, 0.0f, 1.0f); GL.Vertex3(-1.0f, 1.0f, -1.0f); GL.Vertex3(-1.0f, 1.0f, 1.0f); GL.Vertex3(1.0f, 1.0f, 1.0f); GL.Vertex3(1.0f, 1.0f, -1.0f); GL.Color3(0.0f, 1.0f, 1.0f); GL.Vertex3(1.0f, -1.0f, -1.0f); GL.Vertex3(1.0f, 1.0f, -1.0f); GL.Vertex3(1.0f, 1.0f, 1.0f); GL.Vertex3(1.0f, -1.0f, 1.0f); GL.End(); } #endregion #region public void Launch() /// /// Launches this example. /// /// /// Provides a simple way for the example launcher to launch the examples. /// public void Launch() { Run(); } #endregion } }