Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

Счетчики и рейтинг

Рейтинг@Mail.ru
Среда программирования: 
Microsoft C#

Для начала работы нам понадобится Microsoft Visual Studio 2010 или старше (я использую Visual Studio 2013) Советую скачивать английскую версию.
Ссылка на бесплатную редакцию: https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx

Создание WPF проекта
1.Выбираем FILE>NEW>PROJECT (или нажимаем CTRL+SHIFT+N)
2.Слева в пункте Installed разворачиваем пункт Templates выбираем пункт Visual C#
3.В списке нажимаем на WPF Application называем проект(мое название WPFOpenGl) и нажимаем Ок.

Дальнейшие подготовительные работы
После создание проекта у нас в Solution Explorer появляются вот такие файлы

Работать мы будем с MainWindow.xaml и MainWindow.xaml.cs, первый отвечает за то как наше приложение будет выглядеть после запуска, а второй за его функциональную часть.

Далее нам нужно установить SharpGL для работы с OpenGL:
1.Переходим в TOOLS>NuGet Package Manager>Package Manager Console
2.В появившейся консоли выбираем Package Source "nuget.org" и вводим Install-Package SharpGL.WPF

Теперь все готово для непосредственного подключения OpenGL.

Начало работы:
1. Работа с MainWindow.xaml
Добавляем ссылку на SharpGl, в свойствах элемента Window (Между "<Window" и ">" )
вставляем строку xmlns:wpf="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF"
Теперь когда у нас есть ссылка на библиотеку добавим область рендера.
Внутрь элемента Grid добавим строку

<wpf:OpenGLControl OpenGLDraw="OpenGLControl_OpenGLDraw"
                               OpenGLInitialized="OpenGLControl_OpenGLInitialized"
                               Resized="OpenGLControl_Resized"
                               DrawFPS="True"/>

Так чтоб в итоге у нас вышло вот такой текст в MainWindow.xaml
<Window x:Class="WPFOpenGl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpf="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
      <wpf:OpenGLControl OpenGLDraw="OpenGLControl_OpenGLDraw"
                               OpenGLInitialized="OpenGLControl_OpenGLInitialized"
                               Resized="OpenGLControl_Resized"
                               DrawFPS="True"/>
   </Grid>
</Window>

Мы создали Control на котором будет происходить вывод нашей сцены, теперь нам осталось создать обработчики событий OpenGLDraw, OpenGLInitialized и Resized

2.Работа с MainWindow.xaml.cs
Добавляем функцию инициализации OpenGLControl_OpenGLInitialized

private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
{
   var gl = args.OpenGL;
   gl.ClearColor(0.3f, 0.3f, 0.3f, 0.3f);
}

она просто создает сцену с фоновым серым цветом
И добавляем функцию отрисовки OpenGLControl_OpenGLDraw
private void OpenGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
{
   var gl = args.OpenGL;
   gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
   gl.Begin(OpenGL.GL_TRIANGLES);
   gl.Color(0f, 1f, 0f);
   gl.Vertex(-1f, -1f);
   gl.Vertex(0f, 1f);
   gl.Vertex(1f, -1f);
   gl.End();
}

она очищает экран с каждым новым кадром и рисует треугольник.

И в завершение создаем OpenGLControl_Resized

private void OpenGLControl_Resized(object sender, OpenGLEventArgs args)
{
}

На этом все, можно запускать приложение нажатием кнопки F5.
Готовый проект приложен в прикрепленных файлах для сравнения.

Прикрепленный файлРазмер
WPFOpenGl.zip926.34 кб