#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.Enums; using OpenTK.Input; #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() { 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 UpdateFrame 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 UpdateFrame() { if (Key.Escape) { Quit = true; return; } 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 RenderFrame function /// /// Place your rendering code here. /// public override void RenderFrame() { GL.Clear(Enums.ClearBufferMask.COLOR_BUFFER_BIT | Enums.ClearBufferMask.DEPTH_BUFFER_BIT); DrawCube(); Context.SwapBuffers(); } #endregion #region DrawCube function /// /// Draws simple, colored cube. /// protected void DrawCube() { GL.Begin(Enums.BeginMode.QUADS); GL.Color3f(1, 0, 0); GL.Vertex3f(-1.0f, -1.0f, -1.0f); GL.Vertex3f(-1.0f, 1.0f, -1.0f); GL.Vertex3f(1.0f, 1.0f, -1.0f); GL.Vertex3f(1.0f, -1.0f, -1.0f); GL.Color3f(1, 1, 0); GL.Vertex3f(-1.0f, -1.0f, -1.0f); GL.Vertex3f(1.0f, -1.0f, -1.0f); GL.Vertex3f(1.0f, -1.0f, 1.0f); GL.Vertex3f(-1.0f, -1.0f, 1.0f); GL.Color3f(1, 0, 1); GL.Vertex3f(-1.0f, -1.0f, -1.0f); GL.Vertex3f(-1.0f, -1.0f, 1.0f); GL.Vertex3f(-1.0f, 1.0f, 1.0f); GL.Vertex3f(-1.0f, 1.0f, -1.0f); GL.Color3f(0, 1, 0); GL.Vertex3f(-1.0f, -1.0f, 1.0f); GL.Vertex3f(1.0f, -1.0f, 1.0f); GL.Vertex3f(1.0f, 1.0f, 1.0f); GL.Vertex3f(-1.0f, 1.0f, 1.0f); GL.Color3f(0, 0, 1); GL.Vertex3f(-1.0f, 1.0f, -1.0f); GL.Vertex3f(-1.0f, 1.0f, 1.0f); GL.Vertex3f(1.0f, 1.0f, 1.0f); GL.Vertex3f(1.0f, 1.0f, -1.0f); GL.Color3f(0, 1, 1); GL.Vertex3f(1.0f, -1.0f, -1.0f); GL.Vertex3f(1.0f, 1.0f, -1.0f); GL.Vertex3f(1.0f, 1.0f, 1.0f); GL.Vertex3f(1.0f, -1.0f, 1.0f); GL.End(); } #endregion #region static public void Launch() /// /// Launches this example. /// /// /// Provides a simple way for the example launcher to launch the examples. /// static public void Launch() { using (T03_RotatingCube ex = new T03_RotatingCube()) { ex.Run(); } } #endregion } }