Blame |
Last modification |
View Log
| RSS feed
#region --- License ---
/* Licensed under the MIT/X11 license.
* Copyright (c) 2006-2008 the OpenTK Team.
* This notice may not be removed from any source distribution.
* See license.txt for licensing detailed licensing details.
*/
#endregion
#region --- Using Directives ---
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
#endregion
namespace Examples
.Tutorial
{
/// <summary>
/// Demonstrates immediate mode rendering.
/// </summary>
[Example
("Immediate mode", ExampleCategory
.OpenGL,
"1.x",
1, Documentation
="ImmediateMode")]
public class T03_Immediate_Mode_Cube
: GameWindow
{
#region --- Fields ---
const float rotation_speed
= 180
.0f
;
float angle
;
#endregion
#region --- Constructor ---
public T03_Immediate_Mode_Cube
() : base(800,
600,
new GraphicsMode
(16,
16))
{ }
#endregion
#region OnLoad
protected override void OnLoad
(EventArgs e
)
{
base.OnLoad(e
);
GL
.ClearColor(Color
.MidnightBlue);
GL
.Enable(EnableCap
.DepthTest);
}
#endregion
#region OnResize
/// <summary>
/// Called when the user resizes the window.
/// </summary>
/// <param name="e">Contains the new width/height of the window.</param>
/// <remarks>
/// You want the OpenGL viewport to match the window. This is the place to do it!
/// </remarks>
protected override void OnResize
(EventArgs e
)
{
base.OnResize(e
);
GL
.Viewport(0,
0, Width, Height
);
double aspect_ratio
= Width
/ (double)Height
;
OpenTK
.Matrix4 perspective
= OpenTK
.Matrix4.CreatePerspectiveFieldOfView(MathHelper
.PiOver4,
(float)aspect_ratio,
1,
64);
GL
.MatrixMode(MatrixMode
.Projection);
GL
.LoadMatrix(ref perspective
);
}
#endregion
#region OnUpdateFrame
/// <summary>
/// Prepares the next frame for rendering.
/// </summary>
/// <remarks>
/// Place your control logic here. This is the place to respond to user input,
/// update object positions etc.
/// </remarks>
protected override void OnUpdateFrame
(FrameEventArgs e
)
{
base.OnUpdateFrame(e
);
if (Keyboard
[OpenTK
.Input.Key.Escape])
{
this.Exit();
return;
}
}
#endregion
#region OnRenderFrame
/// <summary>
/// Place your rendering code here.
/// </summary>
protected override void OnRenderFrame
(FrameEventArgs e
)
{
base.OnRenderFrame(e
);
GL
.Clear(ClearBufferMask
.ColorBufferBit | ClearBufferMask
.DepthBufferBit);
Matrix4 lookat
= Matrix4
.LookAt(0,
5,
5,
0,
0,
0,
0,
1,
0);
GL
.MatrixMode(MatrixMode
.Modelview);
GL
.LoadMatrix(ref lookat
);
angle
+= rotation_speed
* (float)e
.Time;
GL
.Rotate(angle, 0
.0f, 1
.0f, 0
.0f
);
DrawCube
();
this.SwapBuffers();
Thread
.Sleep(1);
}
#endregion
#region private void DrawCube()
private void DrawCube
()
{
GL
.Begin(BeginMode
.Quads);
GL
.Color3(Color
.Silver);
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(Color
.Honeydew);
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(Color
.Moccasin);
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(Color
.IndianRed);
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(Color
.PaleVioletRed);
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(Color
.ForestGreen);
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 static void Main()
/// <summary>
/// Entry point of this example.
/// </summary>
[STAThread
]
public static void Main
()
{
using (T03_Immediate_Mode_Cube example
= new T03_Immediate_Mode_Cube
())
{
Utilities
.SetWindowTitle(example
);
example
.Run(30.0,
0.0);
}
}
#endregion
}
}