Есть актуальная библиотека 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)