Реферат по предмету "Информатика, программирование"


Концепції програмування. Графічна система OpenGL

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
Контрольна робота
з предмета “ Комп’ютерна графіка "
(варіант №7)
Виконала: студенткагрупи ПЗС-504
КАЛІНІНА І.М.
Перевірив
викладач: КОЗІК В.Ю.
м. Бердичів
2007 р
Основні типи проекції
Це питання часто задають програмісти припорівнянні додатків, створених в різних середовищах програмування, що починають.Дійсно, мінімальний додаток, створений в різних версіях Delphi, може досягативід 170 до 290 Кбайт. Це дуже велика цифра для операційного середовища Windows,в компіляторах C++ вона складає порядка 40 Кбайт. Звичайно, це не катастрофічнапроблема, коли місткості накопичувачів вимірюються гігабайтами, і середнійкористувач, як правило, не звертає уваги на розмір файлу. Незручностівиникають, наприклад, при розповсюдженні додатків по мережі. Використовуванняпакетів значно знімає гостроту проблеми для масштабних проектів, але сумарнавага додатку і пакетів, що використовуються, все одно значна. Коротка відповідьна питання, поставлене в заголовку розділу, полягає в тому, що великий розмір додатків,що відкомпілювалися, є платнею за неймовірну зручність проектування, Delphi, щонадається. Архітектура середовища програмування, RTTI, компонентний підхід — всеце перетворює Delphi на дивно могутній інструмент. За допомогою Delphi легконаписати додатки, в яких, наприклад, динамічно створюються інтерфейсні елементибудь-якого типу (класу). Однак, додатку середнього рівня не використовують і непотребують цих могутніх можливостей. Чи часто вам зустрічалися додатки, щопропонують користувачу перед уведення-виведенням даних визначитися, задопомогою яких інтерфейсних елементів здійснюватиметься введення або висновок,а потім розмістити ці елементи на вікні в зручних місцях? І користувачі, ірозробники в таких засобах, як правило, не випробовують необхідності. Протемодуль, що відкомпілювався, містить в собі весь той код, завдяки якому в Delphiтак легко проводити маніпуляції з властивостями і методами об'єктів. Наприклад,якщо проглянути вміст модуля, що відкомпілювався, то ми зустрінемо в ньомуфрази, що мають до власне операційної системи непряме відношення, наприклад,«OnKeyDown» або інші терміни Delphi. Справа тут не в недосконалості компілятора, компілятор Delphi оптимізує кодчудово, справа в самій ідеології Delphi. Дуже часто після з'ясування цього факту програмісти, що починають, задаютьпитання, як позбутися RTTI, від включення «непотрібного» коду увиконувані модулі. На жаль, цезробити неможливо. Кардинально проблема розв'язується тільки через відмову відвикористовування бібліотеки класів Delphi, т. e. програмування без VCL. Післятого, як ми торкнулися до основоположних термінів і понять операційної системиWindows «повідомлення» і «посилання на вікно», ми зможемоопуститися нижче за рівень об'єктно-орієнтованого програмування, VCL і RAD-технологій.Потрібне це з чотирьох причин. По-перше, додатки, активно використовуючіграфіку, частіше за все не мають потреби і не використовують багатствобібліотеки класів Delphi. Таким додаткам, як правило, достатньо вікна якполотно, таймера і обробників миші і клавіатури. По-друге, при програмуванні,заснованому тільки на використовуванні функцій API, виходять мініатюрні додатки.Модуль, що відкомпілювався, не обтяжується кодом опису компонентів і кодом,пов'язаним з концепціями ООП. По-третє, для розуміння прийомів, щовикористовуються для збільшення швидкості відтворення, потрібно мати уявленняпро справжній пристрій Windows-програми. Наприклад, щоб командиперемальовування вікна виконувалися швидше, ми уникатимемо використовуванняметодів Refresh і paint форми. По-четверте, це необхідне для розуміння дій,вироблюваних для підключення OpenGL. Ця бібліотека створювалася в епохустановлення ООП, і її поки не торкнулися подальші нововведення в технологіїпрограмування.Мінімальна Windows-програма
Подивитеся на проект з підкаталогу Ex07 — кодмінімальної програми Windows. Мінімальної вона є в тому значенні, що врезультаті виходить просто порожнє вікно. Також її можна назвати мінімальноюпрограмою тому, що модуль, що відкомпілювався, займає всього близько 16 Кбайт.Додаток меншого розміру, що має власне вікно, одержати вже ніяк не вдасться,хоча можуть бути і програми ще коротше і менше, наприклад, така:
program p; uses Windows;
begin MessageBeep (mb_ok) end.
Єдине, що робить ця програма, — подачазвукового сигналу. Проте повернемося до коду проекту з підкаталогу Ex07. Перше,на що необхідно звернути увагу: в списку uses вказано тільки два модулі — windowsі Messages. Це означає, що в програмі використовуються виключно функції API, іяк наслідок — довгий С-подібний код. І дійсно, перенести цю і подібні їйпрограми на Із зажадає небагато зусиль. Дана програма для нас украй важлива,оскільки вона стане шаблоном для деяких інших прикладів. Програму умовно можнарозділити на дві частини — опис віконної функції і власне головна програма. Увіконній функції задається реакція додатку на повідомлення Windows. Самевіконну функцію необхідно доповнювати кодом обробників повідомлень длярозширення функціональності додатку. Щось подібне ми маємо вподія-орієнтованому програмуванні, але, звичайно, в абсолютно іншій якості. Вмінімальній програмі задана реакція на єдине повідомлення wm_Destroy. На рештувсе повідомлень викликається функція ядра операційної системи DefWindowProc, щоздійснює стандартну реакцію вікна. Одержане вікно поводиться звичайно, йогоможна змінювати в розмірах, мінімізувати, максимізувати. Додаток реагує такожзвичним чином, проте необхідності кодувати всі ці дії немає. У принципі, можнавидалити і обробку повідомлення wm_Destroy, але в цьому випадку додаток післязавершення роботи залишить слід в пам'яті, що з'їдає ресурси операційноїсистеми. Значення змінної-результату обнуляється на початку опису віконноїфункції для запобігання зауваження компілятора про можливу неініціалізаціюзмінною. Головна програма починається з того, що визначаються атрибути вікна. Термін«структура», що перейшов в Delphi з мови З, відповідає терміну «запис».Термін «клас вікна» має до термінології об'єктно-орієнтованогопрограмування швидше наближене, ніж безпосереднє відношення. Значення, щозадаються полям структури, визначають властивості вікна В цій програмі я задавзначення всім полям, що, у принципі, робити не обов'язково, ми зобов'язанівказати адресу віконної функції, а всю решту значень можна брати за умовчанням.Проте в цьому випадку вікно виглядатиме або поводитиметься незвичайно. Наприклад,при запуску будь-якого додатку операційна система задає курсор для нього увигляді пісочного годинника, і якщо ми не станемо явно задавати вид курсора вкласі вікна, курсор вікна додатку так і залишиться у вигляді пісочногогодинника. Після заповнення полів класу вікна його необхідно зареєструвати вопераційній системі. В прикладі я аналізую результат, що повертається функцієюRegisterclass Це також робити не обов'язково, неможливість реєстрації класувікна — ситуація украй рідкісна за умови коректного заповнення його полів. Наступнірядки можна інтерпретувати як «створення конкретного екземпляра на базізареєстрованого класу» Дуже схоже на ООП, але схожість ця вельми приблизнаі пояснюється тим, що перша версія Windows створювалася в епоху первинногостановлення концепції об'єктно-орієнтованого програмування. При створенні вікнами уточнюємо його деякі додаткові властивості — заголовок, положення, розміри іінше. Значення цих властивостей задаються аргументами функції createWindow, щоповертає увагу, величину типа HWND — те саме посилання на вікно, що в Delphiназивається Handle. Після створення вікна його можна відобразити — викликаємофункцію showWindow. Як правило, вікно відразу після цього перемальовуютьвикликом функції updateWindow — дія теж необов'язкова, але для коректної роботидодатку видаляти цей рядок небажано. Далі слідує цикл обробки повідомлень,найважливіше місце в програмі, фактично це і є власне робота додатку. В ньомувідбувається діалог додатку з операційною системою: витягання черговогоповідомлення з черги і передача його для обробки у віконну функцію. Як вжемовилося, функції API і повідомлення — теми дуже обширні, і я не ставлю за метувичерпно освітити ці теми. В розумних об'ємах я зможу висловити тількинайнеобхідніше, а більш докладну інформацію можна одержати в оперативнійдопомозі Delphi. На жаль, версії Delphi 3 і 4 поставляються з системоюдопомоги, не набудованої належним чином для отримання інформації по функціяхAPI і командах OpenGL. Якщо судити за змістом допомозі, то може скластисявраження, що ці розділи в ній взагалі відсутні. Можна або настроювати довідковусистему самостійно, або, що я і пропоную, користуватися контекстною підказкою — для отримання відомостей по будь-якій функції API достатньо поставити курсор навідповідний рядок і натискувати клавішу .
В п'ятій версії Delphi система допомогинабудована цілком задовільно, а самі файли допомоги оновлені.
До речі, звертаю увагу, що описи функційприводяться з файлів фірми Microsoft, призначених головним чином дляпрограмістів, що використовують мову З, тому одержану інформацію необхідноінтерпретувати в контекст Delphi. Код мінімальної програми я детальнопрокоментував, так що сподіваюся, що всі виниклі питання ви зможете дозволитиза допомогою моїх коментарів.
Отже, в додатках Windows насправді управлінняпостійно знаходиться в циклі обробки повідомлень, подія-орієнтована схема яктака відсутня При отриманні вікном чергового повідомлення управлінняпередається віконній функції, в якій задається реакція на нього, абовикликається функція API DefWindowProc для реакції, прийнятої за умовчанням.
Приведений приклад лише віддалено нагадує те,що ми маємо в Delphi — подія-орієнтоване програмування, засноване на об'єктах. Звичайно,вчинити шлях, зворотний історично пройденому, нелегко. Відмовитися відбібліотеки VCL при написанні програм на Delphi для багато кого виявляєтьсянепосильним. Винагородою тут може стати мініатюрність одержаних програм: як мибачимо, мінімальна програма зменшилася мінімум вдесятеро, швидшезавантажується, виконується і швидше вивантажується з пам'яті. Такий розмірнелегко, а деколи і неможливо одержати в будь-якому іншому компіляторі, окрімяк в Delphi. До того ж проекти, в списку uses яких коштують тільки windows іMessages, компілюються ще стрімкіше, не дивлячись на страхітливу масивністькоду. А зараз подивитеся проект з підкаталогу Ex08, де вікно доповнено кнопкоюі міткою. В коді з'явилися нові рядки, а найпростіші маніпуляції, наприклад,зміна шрифту мітки, ще зажадають додаткові рядки. Подібний обширний кодзвичайно бентежить новачків, тому я не зловживатиму такими прикладами іобмежуся тільки найнеобхіднішими для нас темами — як створити обробник миші,клавіатури і таймера. Я не примушуватиму вас писати всі програми такимвиснажливим способом, нам просто потрібно мати уявлення про роботу базовихмеханізмів, щоб краще розуміти, що робить за нас Delphi і що необхідно зробити,щоб підключити OpenGL до наших проектів.Поняття контексту відображення та пристрою в бібліотеціOpengl
Ми вже знаємо, що посилання на контекстпристрою — це величина типа HDC. Для її отримання можна викликати функціюGetDC, аргументом якої є посилання на потрібне вікно. Посиланню на контекстпристрою відповідає властивість canvas. Handie форми, принтера і деякихкомпонентів Delphi. Яке ж все-таки значення контексту пристрою, якщо він ітакий пов'язаний з однозначно певним об'єктом — вікном, областю пам'яті абопринтером, і навіщо передавати додатково якусь інформацію про однозначно певнийоб'єкт? Для відповіді на ці питаннязвернемо увагу на чудову властивість висновку в Windows, що полягає в тому, щоодними і тими ж функціями здійснюється висновок на різні пристрої. Рядки програми
Forml. Canvas. Ellipse (0, 0, 100, 100);
І
Printer. BeginDoc;
Printer. Canvas. Ellipse (0, 0, 100, 100);
Printer. EndDoc;
малюють один і той же круг як на поверхніформи, так і в роздруковуваному документі, т. e. на різних пристроях, причомуякщо ми виводитимемо різнокольорову картинку на монохромний принтер, вінсправиться з цією задачею, передаючи кольори відтінками сірого. Навіть якщо мималюємо тільки на полі форми, ми маємо справу з різними пристроями — намневідомо, яка графічна платня комп'ютера і які характеристики поточноїустановки настройок екрану. Наприклад, маючи в своєму розпорядженні більше 16мільйонів кольорів, додаток не піклується про відображення цієї багатої палітрина екрані, що має свій в розпорядженні всього 256 кольори. Такі питання додатокперекладає на плечі OpenGL Графіка в проектах Delphi раціонноїсистеми, вирішальної їх за допомогою використовуваннядрайверів пристроїв Для того, щоб скористатисяфункціями відтворення Windows, додатку необхідно тільки вказати посилання наконтекст пристрою, що містить засоби і характеристики пристрою висновку. Довідковий файл Win32 Programmer's Reference фірмиMicrosoft, що поставляється у складі Delphi, про контекст пристрою повідомляєнаступне «Контекст пристрою є структурою, яка визначає комплект графічнихоб'єктів і пов'язаних з ними атрибутів і графічні режими, що впливають нависновок Графічний об'єкт включає олівець для зображення лінії, кисть длязафарбовування і заповнення, растр для копіювання або прокрутки частин екрану,палітру для визначення комплекту доступних кольорів, області для відсікання іінших операцій, маршрут для операцій малювання» В OpenGL є аналогічне посиланню на контекст пристрою поняття посилання наконтекст відтворення Графічна системаOpenGL, як і будь-який інший додаток Windows (хоча і розміщене в DLL), такожпотребує посилання на пристрій, на який здійснюватиметься висновок Цеспеціальне посилання на контекст відтворення, — величина типа HGLRC (HandleopenGL Rendering Context, посилання на контекст відтворення OpenGL).
Контекст пристрою Windows містить інформацію,що відноситься до графічних компонентів GDI, а контекст відтворення міститьінформацію, що відноситься до OpenGL, т e грає таку ж роль, що і контекстпристрою для GDI Зокрема, згаданіконтексти є сховищами стану системи, наприклад, бережуть інформацію пропоточний колір олівця.Засобами бібліотеки Opengl побудувати сферу
Після відображення команд в програмі Delphiсфера матиме такий вигляд, який вказаний в моєму завданні нижче на (рис.1, рис.2,рис.3)
/>
рис. №1

/>
рис. № 2
 
/>
рис. №3
Листинг програми матиме такий вигляд:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,
OpenGL, Menus;
type
TfrmGL = class (TForm)
procedure FormCreate (Sender: TObject);
procedure FormPaint (Sender: TObject);
procedure FormDestroy (Sender: TObject);
procedure FormKeyDown (Sender: TObject; varKey: Word;
Shift: TShiftState);
procedure FormResize (Sender: TObject);
procedure FormKeyPress (Sender: TObject; varKey: Char);
private
DC: HDC; // контекст пристрою
hrc: HGLRC; // контекст відображення
ry: GLfloat; // зміна координати по У
tx: GLfloat; // зміна координати по Х
end;
var
frmGL: TfrmGL;
mode: (POINT, LINE, FILL) = FILL; // режимивідображення обєкта
mx,my: byte; // коефіцієнтизбільшення/зменшення
implementation
uses DGLUT;
{$R *. DFM}
procedure TfrmGL. FormPaint (Sender: TObject);
begin
glClear (GL_COLOR_BUFFER_BIT orGL_DEPTH_BUFFER_BIT); // очищення буферу кольору
glPushMatrix; // заповнюємо систему координат
glScalef (my/mx, my/mx, my/mx); // виконуємомаштабування
glRotatef (ry, 0.0, 1.0, 0.0); // виконуємопотовот
glTranslatef (tx, 0.0, 0.0); // виконуємоперенесення
case mode of // вибираємо режим відображення
POINT: glPolygonMode (GL_FRONT_AND_BACK, GL_POINT);
LINE: glPolygonMode (GL_FRONT_AND_BACK,GL_LINE);
FILL: glPolygonMode (GL_FRONT_AND_BACK,GL_FILL);
end;
glutSolidSphere (1.5, 20, 20); // будуємосферу
glScalef (mx/my, mx/my, mx/my); // повертаємосистему в початкове полож
glPopMatrix; // повертаємо систему в попереднєположення
SwapBuffers (DC); // відображуємо на екрані
end;
procedure SetDCPixelFormat (hdc: HDC);
var
pfd: TPixelFormatDescriptor;
nPixelFormat: Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd. dwFlags: = PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGLor PFD_DOUBLEBUFFER;
nPixelFormat: = ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
procedure TfrmGL. FormCreate (Sender: TObject);
begin
DC: = GetDC (Handle);
SetDCPixelFormat (DC);
hrc: = wglCreateContext (DC);
wglMakeCurrent (DC, hrc);
glClearColor (0.5, 0.5, 0.75, 1.0); // цветфона
glLineWidth (1.5);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_DEPTH_TEST);
glEnable (GL_COLOR_MATERIAL);
glColor3f (1.0, 0.0, 0.0);
ry: = 0.0;
tx: = 0.0;
mx: =10;
my: =10;
end;
procedure TfrmGL. FormDestroy (Sender: TObject);
begin
wglMakeCurrent (0, 0);
wglDeleteContext (hrc);
ReleaseDC (Handle, DC);
DeleteDC (DC);
end;
procedure TfrmGL. FormKeyDown (Sender: TObject;var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
If Key = VK_LEFT then begin
ry: = ry + 2.0;
InvalidateRect (Handle, nil, False);
end;
If Key = VK_RIGHT then begin
ry: = ry — 2.0;
InvalidateRect (Handle, nil, False);
end;
If Key = VK_UP then begin
tx: = tx — 0.1;
InvalidateRect (Handle, nil, False);
end;
If Key = VK_DOWN then begin
tx: = tx + 0.1;
InvalidateRect (Handle, nil, False);
end;
If Key = 49 then begin
mode: = POINT;
InvalidateRect (Handle, nil, False);
end;
If Key = 50 then begin
mode: = LINE;
InvalidateRect (Handle, nil, False);
end;
If Key = 51 then begin
mode: = FILL;
InvalidateRect (Handle, nil, False);
end;
end;
procedure TfrmGL. FormResize (Sender: TObject);
begin
glViewport (0, 0, ClientWidth, ClientHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity;
glFrustum (-1, 1, — 1, 1, 2,9);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity;
 // этот фрагмент нужен для приданиятрёхмерности
glTranslatef (0.0, 0.0, — 5.0); // перенособъекта — ось Z
glRotatef (30.0, 1.0, 0.0, 0.0); // поворотобъекта — ось X
glRotatef (70.0, 0.0, 1.0, 0.0); // поворотобъекта — ось Y
InvalidateRect (Handle, nil, False);
end;

Для попереднього практичного завдання вашоговаріанту забезпечити операцію масштабування використовуючи клавіши “+” та “-“
Для попереднього практичного завдання вашоговаріанту забезпечити операцію масштабування використовуючи клавіши “+” та “-“
Потім для точного виконання завдання виконаласлідуючий алгоритм дій при цьому використала згідно варіанту клавіші "+"та "-", що по умові завдання виконують наближення та відділенняфігури на фоні:
procedure TfrmGL. FormKeyPress (Sender: TObject;var Key: Char);
begin
if key = '-' then mx: =mx+1;
if key = '+' then mx: =mx-1;
InvalidateRect (Handle, nil, False);
end;
end.
Список використаної літератури
1.        С.В. Глушаков, Г.А. Крабе Компютерная графика,Харьков 2002
2.        Блінова Т.О., Порєв В.М. Комп’ютерна графіка / Заред. В.М. Горєва. — К.: Видавництво “Юніор”, 2004.
3.        OpenGl, технология ставшая символов, Учебник впримерах.
4.        Конспект лекцій.
5.        Мережа Інтернет.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Королевство Швеция
Реферат Культура Возрождения и барокко
Реферат «Действия над натуральными числами и нулем. Делимость натуральных чисел». Цели урока
Реферат Автор: Наталия Михайловна Кочергина, редактор издательства РоссАзия, научный сотрудник Музея Н. К. Рериха, г. Новосибирск
Реферат Расчетно-кассовое обслуживание корпоративных клиентов коммерческими банками на примере ОАО Уралсиб
Реферат Staatsorgane des Bundes
Реферат Особенности замены радиодеталей в схемах (как правильно подобрать для замены резисторы, конденсаторы, диоды и др.)
Реферат Освоение целины в 1954-1964 годах
Реферат Кинетическая модель механизма компенсированного распада углеводородов на платине
Реферат Оруженосцы нации вермахт и части особого назначения СС 1934-1939 гг
Реферат Две разновидности интертекста в романе В. Орлова "Альтист Данилов"
Реферат Особенности игровой деятельности детей младшего дошкольного возраста
Реферат Анализ упоминаемости в сми ромир и конкурентов Обзор сми за 2 июня 2009 год
Реферат Политика Британской Колумбии
Реферат Предмет и метод теории государства и права