В данной статье я хотел бы рассказать про использование OpenGL в C#. По моему мнению одной из самых простых библиотек для данной цели является OpenTK (The Open Toolkit Library).
Для начала нам понадобится скачать саму библиотеку. Сделать это можно на официальном сайте. После разархивации необходимо добавить в ваше приложение ссылку на библиотеку. Для этого в обозревателе решений щелкните правой кнопкой мыши на папке 'Ссылки' и в появившемся контекстном меню выберите 'Добавить ссылку...'. Во вкладке 'Обзор' перейдите в папку, куда вы разархивировали библиотеку и выберите файл: OpenTK.dll. После этого можно писать приложения с использованием OpenGL в C#.
Ниже приведен пример простейшего приложения, который с использованием OpenGL выводит на экран треугольник:
Для начала нам понадобится скачать саму библиотеку. Сделать это можно на официальном сайте. После разархивации необходимо добавить в ваше приложение ссылку на библиотеку. Для этого в обозревателе решений щелкните правой кнопкой мыши на папке 'Ссылки' и в появившемся контекстном меню выберите 'Добавить ссылку...'. Во вкладке 'Обзор' перейдите в папку, куда вы разархивировали библиотеку и выберите файл: OpenTK.dll. После этого можно писать приложения с использованием OpenGL в C#.
Ниже приведен пример простейшего приложения, который с использованием OpenGL выводит на экран треугольник:
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;
namespace Example
{
class MyApplication
{
[STAThread]
public static void Main()
{
using (var game = new GameWindow())
{
game.Load += (sender, e) =>
{
// setup settings, load textures, sounds
game.VSync = VSyncMode.On;
};
game.Resize += (sender, e) =>
{
GL.Viewport(0, 0, game.Width, game.Height);
};
game.UpdateFrame += (sender, e) =>
{
// add game logic, input handling
if (game.Keyboard[Key.Escape])
{
game.Exit();
}
};
game.RenderFrame += (sender, e) =>
{
// render graphics
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
GL.Begin(PrimitiveType.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
game.SwapBuffers();
};
// Run the game at 60 updates per second
game.Run(60.0);
}
}
}
}