Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Інститут комп’ютерних технологій автоматики та метрології
Кафедра БІТ
Звіт
до лабораторної роботи № 1
з дисципліни :
“Програмування комп’ютерної графіки ”
Львів 2012
Мета: Створення програми-заготовки для роботи з бібліотекою openGL.
КОРОТКІ ТЕОРЕТИЧНІ ДАНІ
Використання бібліотеки OPENGL вимагає навиків програмування на C++, С# або Delphi а також знання основ об`єктного програмування на рівні операційної системи Windows.
Для виконання роботи необхідно мати уявлення про основні принципи формування зображення на екрані, про сучасні стандарти і інтерфейси програмування комп'ютерної графіки ([7] – лекція 17), знати особливості представлення кольору в колірній моделі RGB ([7] – лекція 4).
Основні поняття, використовувані в даній лабораторній роботі: контекст пристрою, контекст відтворення, формат піксела.
Контекст графічного пристрою (Device Context) указує площину відображення, на яку здійснюється графічний вивід: вікно програми на екрані дисплея, сторінка принтера або інше місце, куди може бути направлений графічний вивід. Якщо програма викликає різні графічні функції, такі як малювання крапок, ліній, фігур і ін., необхідно указувати ідентифікатор контексту (hdc – handle of device context) і координати. Сенс використання контексту пристрою полягає в тому, що вивід на різні пристрої здійснюється одними і тими ж функціями, змінюється лише значення hDC. «Контекст пристрою є структурою, яка визначає комплект графічних об'єктів і пов'язаних з ними атрибутів і графічні режими, що впливають на вивід». При складанні програми необхідно набути цього числового значення перед малюванням, а після малювання – звільнити контекст.
У OPENGL існує поняття контекст відтворення (контекст рендеринга), аналогічне поняттю контекст пристрою. Графічна система OPENGL також потребує посилання на пристрій, на який здійснюватиметься вивід. Це спеціальне посилання на контекст відтворення – величина типа HGLRC (handle openGL rendering context, посилання на контекст відтворення OPENGL) - hRC.
Перш ніж отримати контекст відтворення, сервер OPENGL повинен отримати детальні характеристики використовуваного устаткування. Ці характеристики зберігаються в спеціальній структурі – опис формату піксела. Формат піксела визначає конфігурацію буфера кольору і допоміжних буферів.
Хід роботи:
Програма, яка буде створена в результаті виконання даної лабораторної роботи, повинна здійснювати наступні дії: створювати порожнє вікно для графічного виводу засобами openGL; встановлювати всі необхідні параметри графічного виводу; реагувати на натиснення клавіші <ESC> для закриття вікна і завершення роботи. Для демонстрації графічного виводу в кінці лабораторної роботи у вікні буде побудовано деяке зображення. Створена в ході виконання лабораторної роботи програма буде основою для виконання всіх подальших робіт.
Текст програми:
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;
namespace lab1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
OnGl.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);
// установка порта виводу у відповідності з розмірами элемента OnGl
Gl.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);
}
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.glutWireRhombicDodecahedron();
Gl.glPopMatrix();
Gl.glFlush();
OnGl.Invalidate();
}
private void OnGL_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button2_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);
Gl.glPopMatrix();
Gl.glFlush();
OnGl.Invalidate();
}
}
}
Виконання програми:
Висновок: На даній лабораторній роботі я створив програми-заготовки для роботи з бібліотекою openGL. Програма створює порожнє вікно для графічного виводу засобами openGL, встановлює всі необхідні параметри графічного виводу, та будує ромбододекаедр с допомогою бібліотеки FreeGLUT.