МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
/
Звіт
до лабораторної роботи № 1
з дисципліни
“Програмування комп’ютерної графіки”
Створення проекту і підключення бібліотеки TaoOPENGL в С#
Львів – 2011
Порядок виконання роботи
Мета роботи - cтворення програми-заготовки для роботи з бібліотекою OpenGL.
Спочатку створіть новий проект, як шаблон встановивши додаток WindowsForms. Назвіть його TaoGl_<grupa>_<prizvyshe>.
Дочекайтесь поки MSVisualStudioзакінчить генерацію кода шаблону. Тепер перейдіть до вікна SolutionExplorer. Перейдіть на вузол Links, який відображає зв'язки з бібліотеками, необхідними для роботи нашого застосування (рис. 1)
/
Рис. 1
Назвіть головне вікно «Графіка …… ». (Властивості вікна, параметр Text).
Клацніть по цьому вузлу (Links) правою клавішею миші, після чого, в контекстному меню, що відкрилося, виберіть «Додати посилання» (“AddLink”), як показано на рис. 2.
/
Рис. 2
У вікні, що відкрилося, «Додати посилання», перейдіть до закладки огляд. Після цього перейдіть до директорії, в яку була встановлена бібліотека TaoFramework. (Позамовчанню - “C:\programFiles\taoFramework\”).Нам буде потрібно теку bin- в ній зберігаються необхідні нам бібліотеки. Перейдіть в теку binі виберіть 3 бібліотеки, як показано на малюнку 3:
Tao.OpenGL.dll - відповідає за реалізація бібліотеки OPENGL
Tao.FreeGlut.dll - відповідає за реалізацію функцій бібліоєкиGlut. Ми її використовуватимемо для ініціалізації рендера, а так само для різних інших цілей. Tao.Platform.Windows.dll - відповідає за підтримку елементів безпосередньо для візуалізації безпосередньо на платформі Windows (Рис. 2).
/
Рис. 3
Тепер перейдіть до початкового коду вікна. Для роботи з нашими бібліотеками, нам необхідно підключити відповідні простори імен:
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 (панель елементів). Клацніть правою кнопкою на вкладці «Загальні», і в контекстному меню, що розкрилося, виберіть пункт «Вибрати елементи» (Selectelements), як показано на Рис. 4.
/
Рис. 4
У вікні, що відкрилося, знайдіть елемент Simpleopenglcontrolі встановіть біля нього галочку, як показано на Рис. 5. Потім натисніть ОК.
/
Рис. 5
Тепер даний елемент стане доступним для розміщення на формі додатку. Перетягніть елемент на форму, і розмістіть так, як показано на малюнку 7. Праворуч від розміщеного елементу встановіть 3 кнопки - «Візуалізувати», «Візуалізувати»і «Вийти».
Наступним кроком буде виділити елемент simpleopenglcontrol1, розташований на формі і перейти до його властивостей. Змініть параметр name на значення “AnT”.
/
Рис. 6
Тепер нам необхідно ініціалізувати роботу Opengl. Спочатку ми в конструкторі класу повинні ініціалізувати роботу елементу OnGl:
public Form1(){
InitializeComponent(); OnGl.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);// установкапортавиводуувідповідностізрозмірамиэлементаOnGlGl.glViewport(0, 0, OnGl.Width, OnGl.Height);// настройкапроекціїGl.glMatrixMode(Gl.GL_PROJECTION);Gl.glLoadIdentity();Glu.gluPerspective(45, (float)OnGl.Width / (float)OnGl.Height, 0.1, 200);Gl.glMatrixMode(Gl.GL_MODELVIEW);Gl.glLoadIdentity();// настройкапараметрів OpenGL длявізуалізаціїGl.glEnable(Gl.GL_DEPTH_TEST);
}
Увікні ми створили 3 кнопки. Обробник кнопки вийти буде виглядати наступним чином:
// Обробник кнопки "вийти"
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);//будуєморомбододекаедрсдопомогоюбібліотекиFreeGLUT
Glut.glutWireRhombicDodecahedron();Gl.glPopMatrix();Gl.glFlush();OnGl.Invalidate();
}
Обробник кнопки “Очистити” напишіть самостійно.
Текст програми
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// для роботи з бібліотекою OpenGL
using Tao.OpenGl;
// для роботи з бібліотекою FreeGLUT
using Tao.FreeGlut;
// для роботи з бібліотекою SimpleOpenGLControl
using Tao.Platform.Windows;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
AnT.InitializeContexts();
}
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);
}
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();
}
private void button2_Click(object sender, EventArgs e)
{
// обробник кнопки «Очищення»
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
AnT.Invalidate();
}
private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Результат роботи програми
Коли натиснемо на кнопку «Візуалізація», то отримаємо зображення сфери:
/
Рис. 7
Коли натиснемо кнопку «Очищення», то зображення зникне:
/
Рис. 8
Висновок
В данай лабораторній роботі я навчився використовувати елементи бібліотеки OpenGl для побудови зображення.