4.4 Инициализация OpenGL в C#. Тестирование визуализации 3D сферы.

Что прочитать перед этим материалом

4.3 Установка и подключение библиотек TAO

Инициализация 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 Files\Tao 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
Рисунок 3. Процесс добавления библиотек Tao.OpenGL, Tao.FreeGLUT и Tao.Platform.Windows.

На рисунке 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. Подключения к панели элементов SimpleOpenGLControl, предназначенного для визуализации графики в окне.

Теперь данный элемент станет доступным для размещения на форме приложения. Перетащите элемент на форму и разместите так, как показано на рисунке 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. Приложение готово: OpenGL подключен и инициализирован. Пример визаулизации при нажатии на кнопку "Визуализировать".

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

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

Примечание

Если у вас возникли проблемы с запуском приложений, обратите внимание на следующие нюансы:

Если вы используете ОС x64, первым делом попробуйте изменить тип проекта на x86. (Указать в Visual Studio).

Сергей Солонько: «System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — решается методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32.»

Clandestin: «У меня в Windows 7 копирование в C:\Windows\System32 не помогло. Зато помогло копирование непосредственно в папку C:\Windows.»

KsenoByte: «*Предлагаю всем решение проблемы с SimpleOpenGLControl в Visual Studio 2010.

Для того чтобы добавить в Панель Элементов (Toolbox) элемент SimpleOpenGLControl, необходимо следующее:

  1. Нажимаем правой кнопкой по вкладке «Общие» в Панели Элементов и выбираем «Выбор Элементов» (за тавтологию нижайше извиняюсь).*
Панель элементов -> Выбор элементов
Рисунок 1. Панель элементов -> Выбор элементов.

*2. В открывшемся окне обнаруживаем отсутствие SimpleOpenGLControl.

  1. Нажимаем кнопку «Обзор» и находим файл библиотеки C:\Program Files\TaoFramework\bin\Tao.Platform.Windows.dll.

  2. Добавляем.

  3. Наслаждаемся результатом.*»

Решение проблемы с SimpleOpenGLControl
Рисунок 2. Решение проблемы с SimpleOpenGLControl.