NeHe 1 OpenGL Tutorial:Code
From SDL.NET
This is the source to NeHe_1_OpenGL_Tutorial in some of the compliant languages.
[edit]
Visual Basic .NET
This code needs to be updated to the latest version of SDL.NET
Imports System Imports SdlDotNet Imports Tao.Sdl Imports Tao.OpenGl Public Class Tute_001 #Region "Variables" Private Const width As Integer = 800 Private Const height As Integer = 600 Private Const bpp As Integer = 32 Private fini As Boolean Private screen As Surface #End Region Public Shared Sub Main() Dim t As Tute_001 = New Tute_001 t.Run() t = Nothing End Sub Public Sub New() Initialise() End Sub Public Sub Initialise() AddHandler Events.KeyboardDown, AddressOf Me.KeyDown AddHandler Events.Quit, AddressOf Me.Quit screen = Video.SetVideoModeWindowOpenGL(width, height, True) Reshape() End Sub Public Sub Reshape() Gl.glViewport(0, 0, width, height) Gl.glMatrixMode(Gl.GL_PROJECTION) Gl.glLoadIdentity() ' Calculate The Aspect Ratio Of The Window Glu.gluPerspective(45.0F, width / height, 0.1F, 100.0F) Gl.glMatrixMode(Gl.GL_MODELVIEW) Gl.glLoadIdentity() End Sub Public Function InitGL() As Integer Gl.glShadeModel(Gl.GL_SMOOTH) Gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F) Gl.glClearDepth(1.0F) Gl.glEnable(Gl.GL_DEPTH_TEST) Gl.glDepthFunc(Gl.GL_LEQUAL) Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST) Return True End Function Public Function DrawGLScene() As Integer Gl.glClear(Gl.GL_COLOR_BUFFER_BIT Or Gl.GL_DEPTH_BUFFER_BIT) Gl.glLoadIdentity() Video.GLSwapBuffers() Return True End Function Private Sub KeyDown(ByVal sender As Object, ByVal e As KeyboardEventArgs) Select Case e.Key Case Key.Escape fini = True Case Key.F1 If screen.FullScreen = True Then screen = Video.SetVideoModeWindowOpenGL(width, height, True) Else screen = Video.SetVideoModeOpenGL(width, height, bpp) End If Reshape() End Select End Sub Private Sub Quit(ByVal sender As Object, ByVal e As QuitEventArgs) fini = True End Sub Public Sub Run() InitGL() While (fini = False) While Events.Poll End While DrawGLScene() End While End Sub End Class
[edit]
C#
using System;
using System.Reflection;
using System.Diagnostics.CodeAnalysis;
using SdlDotNet.Core;
using SdlDotNet.Input;
using SdlDotNet.Graphics;
using Tao.OpenGl;
namespace SdlDotNetExamples.NeHe
{
/// <summary>
/// Lesson 01: Setting Up An OpenGL Window
/// </summary>
public class NeHe001
{
#region Fields
//Width of screen
int width = 640;
//Height of screen
int height = 480;
// Bits per pixel of screen
int bpp = 16;
// Surface to render on
Surface screen;
/// <summary>
/// Width of window
/// </summary>
protected int Width
{
get
{
return width;
}
}
/// <summary>
/// Height of window
/// </summary>
protected int Height
{
get
{
return height;
}
}
/// <summary>
/// Bits per pixel of surface
/// </summary>
protected int BitsPerPixel
{
get
{
return this.bpp;
}
}
/// <summary>
/// Lesson title
/// </summary>
public static string Title
{
get
{
return "Lesson 01: Setting Up An OpenGL Window";
}
}
#endregion Fields
#region Constructors
/// <summary>
/// Basic constructor
/// </summary>
public NeHe001()
{
Initialize();
}
#endregion Constructors
#region Lesson Setup
/// <summary>
/// Initializes methods common to all NeHe lessons
/// </summary>
protected void Initialize()
{
// Sets keyboard events
Events.KeyboardDown += new EventHandler<KeyboardEventArgs>(this.KeyDown);
// Sets the ticker to update OpenGL Context
Events.Tick += new EventHandler<TickEventArgs>(this.Tick);
Events.Quit += new EventHandler<QuitEventArgs>(this.Quit);
// Set the Frames per second.
Events.Fps = 60;
// Sets Window icon and title
this.WindowAttributes();
// Creates SDL.NET Surface to hold an OpenGL scene
screen = Video.SetVideoMode(width, height, true, true);
}
/// <summary>
/// Sets Window icon and caption
/// </summary>
protected void WindowAttributes()
{
Video.WindowIcon();
Video.WindowCaption =
"SDL.NET - NeHe Lesson " +
this.GetType().ToString().Substring(
this.GetType().ToString().Length - 3);
}
/// <summary>
/// Resizes window
/// </summary>
protected virtual void Reshape()
{
this.Reshape(100.0F);
}
/// <summary>
/// Resizes window
/// </summary>
/// <param name="distance"></param>
protected virtual void Reshape(float distance)
{
// Reset The Current Viewport
Gl.glViewport(0, 0, width, height);
// Select The Projection Matrix
Gl.glMatrixMode(Gl.GL_PROJECTION);
// Reset The Projection Matrix
Gl.glLoadIdentity();
// Calculate The Aspect Ratio Of The Window
Glu.gluPerspective(45.0F, (width / (float)height), 0.1F, distance);
// Select The Modelview Matrix
Gl.glMatrixMode(Gl.GL_MODELVIEW);
// Reset The Modelview Matrix
Gl.glLoadIdentity();
}
/// <summary>
/// Initializes the OpenGL system
/// </summary>
protected virtual void InitGL()
{
// Enable Smooth Shading
Gl.glShadeModel(Gl.GL_SMOOTH);
// Black Background
Gl.glClearColor(0.0F, 0.0F, 0.0F, 0.5F);
// Depth Buffer Setup
Gl.glClearDepth(1.0F);
// Enables Depth Testing
Gl.glEnable(Gl.GL_DEPTH_TEST);
// The Type Of Depth Testing To Do
Gl.glDepthFunc(Gl.GL_LEQUAL);
// Really Nice Perspective Calculations
Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);
}
#endregion Lesson Setup
#region void DrawGLScene
/// <summary>
/// Renders the scene
/// </summary>
protected virtual void DrawGLScene()
{
// Clear Screen And Depth Buffer
Gl.glClear((Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT));
// Reset The Current Modelview Matrix
Gl.glLoadIdentity();
}
#endregion void DrawGLScene
#region Event Handlers
private void KeyDown(object sender, KeyboardEventArgs e)
{
switch (e.Key)
{
case Key.Escape:
// Will stop the app loop
Events.QuitApplication();
break;
case Key.F1:
// Toggle fullscreen
if ((screen.FullScreen))
{
screen = Video.SetVideoMode(width, height, true, true, true);
this.WindowAttributes();
}
else
{
screen = Video.SetVideoMode(width, height, true, true);
}
Reshape();
break;
}
}
private void Tick(object sender, TickEventArgs e)
{
DrawGLScene();
Video.GLSwapBuffers();
}
private void Quit(object sender, QuitEventArgs e)
{
Events.QuitApplication();
}
#endregion Event Handlers
#region Run Loop
/// <summary>
/// Starts lesson
/// </summary>
[STAThread]
public static void Main()
{
NeHe001 t = new NeHe001();
t.Reshape();
t.InitGL();
Events.Run();
}
#endregion Run Loop
}
}

