Уроки OpenGL + C#.

Инициализация библиотеки Tao OpenGL на языке C# в среде .NET.

Инициализация OpenGL в C#. Подключение библиотеки Tao и визуализация графики с ее помощью.

Важные темы, рассматриваемые в данной части главы:
  1. Создание проекта и подключение библиотеки Tao OpenGL в С#.
  2. Инициализация OpenGL в C# .NET .

Дополнительно:
Скопируйте файлы из директории
C:\Programm Files\TaoFramework\lib 
в папку 
C:\Windows\System32

Итак, сейчас мы на основе тестового приложения, проверим работоспособность библиотеки Tao: сначала мы подключим ее к проекту, затем проведем инициализацию библиотеки и инициализацию OpenGL и в качестве проверки визуализируем сферу с помощью библиотеки FreeGlut.
В данной главе мы не будем вдаваться в подробности настройки и инициализации OpenGL в C# - мы лишь проверим работоспособность и научимся размещать специальный элемент управления, предназначенный для визуализации сцены в окне программы.

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

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


Узел "ссылки", необходимый для подключения, который необходимо выбрать для подключения библиотек.
Рисунок 1.

Назовите главное окно «Тестирование инициализации OpenGL в С# .NET ». (Свойства окна, параметр Text).
Щелкните по этому узлу правой клавишей мыши, после чего, в открывшемся контекстном меню выберите «Добавить ссылку» (“Add Link”), как показано на рисунке 2.

Процесс добавления новой ссылки.
Рисунок 2.

В открывшемся окне «Добавить ссылку», перейдите к закладке обзор. После этого перейдите к директории, в которую была установлена библиотека Tao Framework. (По умолчанию – “C:Program FilesTao Framework”).
Нам потребуется папка bin – в ней хранятся необходимые нам библиотеки. Перейдите в папку bin и выберите 3 библиотеки, как показано на рисунке 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#.
Рисунок 3.

На рисунке 4 мы видим все добавившиеся библиотеки в узле «Ссылки» (Links).

Добавление элемента на панель инструментов - в последствии мы разместим добавляемый элемент на форме и в нем будет реализовываться визуализация.

Рисунок 4.

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

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), как показано на рисунке 5.

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

Рисунок 5.

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

Подключения к панели элементов SimpleOpenGLControl, предназначенного для визуализации графики в окне.
Рисунок 6.


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

Расположение элементов на форме.
Рисунок 7.

Теперь выделите элемент simpleOpenGlControl1, расположенный на форме и перейдите к его свойствам. Измените параметр name на значение “AnT”. Далее во всех главах элементы simpleOpenGlControl мы будем называть AnT, (Рисунок 8).

Переименовывание элемента.
Рисунок 8.

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

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


public Form1()
{
InitializeComponent();
AnT.InitializeContexts();
}

Снова перейдите к конструктору и сделайте двойной щелчок левой клавишей мыши на форме – создастся функция обработчик события загрузки формы.
В ней мы поместим код инициализации OpenGl.Подробное описание того, что делает этот код, мы рассмотрим в следующих главах, а сейчас мы только протестируем работу библиотек 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);
 
}

На окне мы создали 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.glColor3f(1.0f, 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();
}

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

Приложение готово: OpenGL подключен и инициализирован. Пример визаулизации, при нажатии на кнопку "Визуализировать".
Рисунок 9.

Вот и все. Мы протестировали работоспособность библиотеки Tao, инициализировав библиотеку OpenGL в C# .NET .

В следующей главе мы познакомимся с инициализацией OpenGL в режиме двухмерной проекции, а так же начнем учиться визуализации различных примитивов, напишем приложение, реализующее рисование графиков функции, а так же познакомимся с работой с цветом и по-управляем разложением спектра цветов на треугольнике.

В следующей главе мы начнем учиться программированию трехмерной графики: мы изучим настройки 2D визуализации, а так же напишем несколько приложений, демонстрирующим методы построения 2D графики.


Обсуждение данного урока: Инициализация OpenGL в C#. Библиотека Tao Framework.
Далее: 5.1 Подробный анализ кода инициализации OpenGL в C#.