Pull to refresh

OpenGL в C#

В данной статье я хотел бы рассказать про использование OpenGL в C#. По моему мнению одной из самых простых библиотек для данной цели является OpenTK (The Open Toolkit Library).
Для начала нам понадобится скачать саму библиотеку. Сделать это можно на официальном сайте. После разархивации необходимо добавить в ваше приложение ссылку на библиотеку. Для этого в обозревателе решений щелкните правой кнопкой мыши на папке 'Ссылки' и в появившемся контекстном меню выберите 'Добавить ссылку...'. Во вкладке 'Обзор' перейдите в папку, куда вы разархивировали библиотеку и выберите файл: 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);
            }
        }
    }
}
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.