Инструкция. Добавляем OpenGL графику на WPF форму с помощью OpenTK.GLControl

Есть актуальная библиотека OpenTK. Библиотека кроссплатформенная, то есть работает на Windows, macOS, Linux, Android и iOS. Она удобна тем, что ставится очень быстро и легко через NuGet и позволяет, как создавать своё окно из консольного проложения, так и встраивать холст для рисования OpenGL графики в WPF и WinForms приложения, сочетая 2D/3D графику со стандартным GUI в одном приложении. Компания Microsoft сделал однажды Fork библиотеки OpenTK на бесплатный Xamarin и встроила эту библиотеку для вывода 2D и 3D графики на Android и iOS в приложениях Xamarin Forms.

  • Создайте пустое WPF приложение
  • Откройте NuGet и установите OpenTK и OpenTK.GLControl
  • Добавьте в References:
System.Drawing
System.Windows.Forms
WindowsFormsIntegration
  • Добавьте NameSpace в XAML:

xmlns:opentk="clr-namespace:OpenTK;assembly=OpenTK.GLControl"

  • Добавьте контрол на форму, задайте обработчик Initialized, задайте имя контрола и обработчики событий Load, Paint и т.д.:
<Grid>
        <WindowsFormsHost Initialized="WindowsFormsHost_Initialized">
            <opentk:GLControl x:Name="glControl" Load="glControl_Load" Paint="glControl_Paint" />
        </WindowsFormsHost>
<Grid>

Пример использования. Данная программа очищает экран выбранным цветом:

MainWindow.xaml.cs

        private void WindowsFormsHost_Initialized(object sender, EventArgs e)
        {
            glControl.MakeCurrent();
        }
 
        private void glControl_Load(object sender, EventArgs e)
        {
            GL.ClearColor(new Color4(0.631f, 0.6f, 0.227f, 1f));
        }
 
        private void glControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            GL.Viewport(0, 0, glControl.Width, glControl.Height);
 
            GL.Clear(ClearBufferMask.ColorBufferBit);
 
            // Draw objects here
 
            glControl.SwapBuffers();
        }

Можете скачать пример рисования треугольника и вывода кнопок на WPF и OpenGL 3.1:EditedTriangle_WPFOpenGL31CSharp.zip (2.6 МБ)

Туториал по OpenGL на OpenTK: https://opentk.net/learn/index.html

Данный туториал был переведёт на C# и OpenTK из знаменитого туториала: https://learnopengl.com/ (На территории РФ сайт не отрывается, нужно ставить VPN, например, плагин для браузера Browsec)