Pull to refresh

Использование OpenGL в среде .NET с помощью C#

Сначала необходимо установить одну из библиотек для работы с OpenGl, так как работать из c# с WinAPI не очень удобно, особенно если дело касается импорта структур. Для примера я использую библиотеку Tao www.taoframework.com

Создание проекта и подключение библиотеки Tao OpenGL в С#.



Сначала создайте новый проект, в качестве шаблона установив приложение Windows Forms. Назовите его «Tao-OpenGL».
Дождитесь пока MS Visual Studio закончит генерацию кода шаблона. Теперь перейдите к окну Solution Explorer (Обозреватель решений). Здесь, нас интересует узел Links, который отображает связи с библиотеками, необходимыми для работы нашего приложения (рисунок).

image

Щелкните по этому узлу правой клавишей мыши, после чего, в открывшемся контекстном меню выберите «Добавить ссылку» (“Add Link”), как показано на следующем рисунке.

image

В открывшемся окне «Добавить ссылку», перейдите к закладке обзор. После этого перейдите к директории, в которую была установлена библиотека Tao Framework. (По умолчанию – “C:\\Program Files\Tao Framework”).
Нам потребуется папка bin – в ней хранятся необходимые нам библиотеки. Перейдите в папку bin и выберите 3 библиотеки, как показано на рисунке.
  1. Tao.OpenGL.dll — отвечает за реализация библиотеки OpenGL
  2. Tao.FreeGlut.dll — отвечает за реализацию функций библиоеки Glut. Мы будем ее использовать для инициализации рендера, а так же для различных других целей.
  3. Tao.Platform.Windows.dll — отвечает за поддержку элементов непосредственно для визуализации непосредственно на платформе Windows.


Процесс добавления библиотек Tao.OpenGL,Tao.FreeGLUT и Tao.Platform.Windows для последующей инициализации и работы с OpenGL в C#:
image

Теперь перейдите к исходному коду окна. Для работы с нашими библиотеками, нам необходимо подключить соответствующие пространства имен:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

// для работы с библиотекой OpenGL
using Tao.OpenGl;
// для работы с библиотекой FreeGLUT
using Tao.FreeGlut;
// для работы с элементом управления SimpleOpenGLControl
using Tao.Platform.Windows;


Теперь вернитесь к конструктору диалогового окна и перейдите к окну Toolbox (панель элементов). Щелкните правой кнопкой на вкладке «Общие», и в раскрывшемся контекстном меню выберите пункт «Выбрать элементы» (Select elements), как показано на рисунке.

Выбор опции добавления элемента:
image

В открывшемся окне найдите элемент SimpleOpenGLControl и установите возле него галочку, как показано на рисунке. Затем нажмите ОК.
image

Теперь данный элемент станет доступным для размещения на форме приложения. Перетащите элемент на форму, и разместите так, как показано на рисунке. Справа от размещенного элемента установите 2 кнопки – «Визуализировать» и «Выйти».
image

Теперь выделите элемент simpleOpenGlControl1, расположенный на форме и перейдите к его свойствам. Измените значение параметра name на «anT».

Инициализация OpenGL в C# .NET .



Теперь нам необходимо инициализировать работу OpenGl.
Сначала мы в конструкторе класса должны инициализировать работу элемента anT:
public Form1()
{

InitializeComponent();
anT.InitializeContexts();

}


Снова перейдите к конструктору и сделайте двойной щелчок левой клавишей мыши на форме – создастся функция обработчик события загрузки формы. В ней мы поместим код инициализации OpenGl. Cейчас мы протестируем работу библиотек OpenGL и FreeGLUT.

private void Form1_Load(object sender, EventArgs e)
{

// инициализация Glut
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);

// очитка окна
Gl.glClearColor(255, 255, 255, 1);

// установка порта вывода в соотвествии с размерами элемента anT
Gl.glViewport(0, 0, anT.Width, anT.Height);

// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, (float)anT.Width / (float)anT.Height, 0.1, 200);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();

// настройка параметров OpenGL для визуализации
Gl.glEnable(Gl.GL_DEPTH_TEST);
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);

}


На окне мы создали 2 кнопки. Обработчик кнопки выйти будет выглядеть следующим образом
//обработчик кнопки "выйти"
private void button2_Click(object sender, EventArgs e)
{

Application.Exit();

}


Обработчик кнопки «Визуализировать» будет содержать код, реализующий визуализацию сеточного каркаса сферы, (за отрисовки трехмерной сферы будет отвечать библиотека FreeGLUT). Код, который будет размещен в данной функции, отвечает за разные технические аспекты визуализации.

Код функции:
// обработчик кнопки "визуализировать"
private void button1_Click(object sender, EventArgs e)
{

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

Gl.glLoadIdentity();
Gl.glColor3i(255, 0, 0);

Gl.glPushMatrix();
Gl.glTranslated(0,0,-6);
Gl.glRotated(45, 1, 1, 0);

// рисуем сферу с помощью библиотеки FreeGLUT
Glut.glutWireSphere(2, 32, 32);

Gl.glPopMatrix();
Gl.glFlush();
anT.Invalidate();

}


Откомпилируйте и запустите приложение.
Результат работы приложения вы увидите после нажатия кнопки «визуализировать». Если вы правильно набрали все исходные коды и выполнили все описанные действия, то вы увидите визуализацию сферы.

Вот и все.


Мы протестировали работоспособность библиотеки Tao, инициализировав библиотеку OpenGL в C# .NET.
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.