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


Побудова ліній та точок з допомогою комп’ютерної графіки

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
Контрольна робота
з предмета “ Комп’ютерна графіка ”
(варіант №11)
Виконав: студент групи ПЗС-504
Лифар Сергій Олександрович
Перевірив
викладач: Козік Вадим Юрійович
м. Бердичів — 2007 р.

Зміст
1.Алгоритм побудови лінії.
/>2. Графічна бібліотека DirectX
3.Засобами бібліотеки Opengl побудувати довільну кількість довільного розміруточок на поверхні форми
Списоквикористаної літератури

1. Алгоритм побудови лінії
Для побудування лінії необхіднозастосувати аргумент команди glBegm — константу GL_LiNES, задаючий примітив«незалежний відрізок».
Для цього примітиву наступні вкомандних дужках вершини (тобто функції glvertex) задають попарно координатипочатку і кінця кожного відрізка прямої. Написавши коротенький алгоритм впрограмному середовищі Delphi миотримаємо лінію.
glBegin (GL_LINES);
glVertex2f (-1, 1);
glVertex2f (1 -1);
glVertex2f (-1, -1);
glVertex2f (1, 1);
glEnd;
Малюються два відрізки, сполучаючи кутивікна по діагоналях. Для збільшення товщини відрізків перед командними дужками потрібновказати ширину лінії:
glLineWidth (2. 5);
Ця функція також повинна виноситися закомандні дужки, у ліній можна усувати ступінчастість, що буду виконуватикоманда glEnable (GL_LINE_SMOOTH); згладжувати нерівності.
glLineWidth (15);
glEnable (GL_LINE_SMOOTH);
glBegin (GL_LINES);
glVertex2f (-0. 7, 0. 7);
викликом і без виклику і подивитесярезультати роботи програми з glEnable (GL_LINE_SMOOTH). Отже, константаGL_LiNES задає примітив окремих відрізків, визначених вказівкою пар вершин.Зрозуміло, що кількість вершин повинна бути парною. Наступна константа — GL_LiNE_STRip — визначає примітив, коли перераховуванні вершини послідовноз'єднуються одна за одною. Код, що приводиться, пояснює відмінність цьогопримітиву від попередньої.
glBegin (GL_LINE_STRIP);
glVertex2f (-l -1);
glVertex2f (-1, 1);
glVertex2f (1, 1);
glVertex2f (l, -l);
glEnd;
Результат — буква П по межі вікна, щозадається константою GL_LiNE_Loop, також послідовно з'єднуються перерахованівершини, проте остання вершина замикається з найпершою. Якщо в попередньомуприкладі використовувати GL_LiNE__ Loop, буде побудований квадрат по межівікна. У прикладах на відрізки ми поки використовували безперервну лінію. Длямалювання пунктирною лінією перед командними дужками потрібно додати наступнірядки:
glLineStipple (1 $FOFO);
glEnable (GL_LINE_STIPPLE);
У функції glLinestipple перший аргумент- масштабний множник, другий аргумент задає шаблон штрихування (побітовимспособом). За допомогою програмного середовища Delphi дуже легко можна побудувати — ще один прикладна використання штрихування (мал. 2. 1).
Мал. 2. 1. Декілька готових шаблонівштрихових ліній
/>

Призначена для користувача процедураdrawOneLine викликається для відтворення кожного окремого відрізка:
procedure TfrmGL. drawOneLine(xl, ylx2, y2: GLfloat);
begin glBegin(GL_LINES);
glVertex2f glVertex2f glEnd;
end;
(2 * xl / ClientWidth — 1. 0, yl (2 *x2 / ClientWidth — 1. 0 y2/ ClientHeight — 0. 5); / ClientHeight — 0. 5);
Змістовна частина коду перемальовуваннявікна виглядає так:
glColor3f (1. 0, 1. 0, 1. 0); // всівідрізки малюються білим // другий рядок: малюється 3 відрізки, все з різнимштрихуванням
glEnable (GL_LINE_STIPPLE);
glLineStipple (1, $0101); // точковий
drawOneLine (50. 0, 125. 0, 150. 0,125. 0);
glLineStipple (1 $OOFF); // штрихи
drawOneLine (150. 0, 125. 0, 250. 0,125. 0);
glLineStipple (1 $1C47); //штріхпунктір
drawOneLine (250. 0, 125. 0, 350. 0,125. 0);
// третій рядок: малюється три широківідрізки з тим же штрихуванням
glLineWidth (5. 0); // задаємо ширинулінії
glLineStipple (1, $0101);
drawOneLine (50. 0, 100. 0, 150. 0,100. 0);
glLineStipple (1 $00FF);
drawOneLine (150. 0, 100. 0, 250. 0,100. 0);
glLineStipple (1 $1C47);
drawOneLine (250. 0, 100. 0, 350. 0,100. 0);
glLineWidth (1. 0);
// в першому рядку малюється 6відрізків, шаблон «пунктир/точка/пунктир», // як частини одногодовгого відрізка, без виклику процедури
drawOneLine glLineStipple (1 $1C47);
glBegin (GL_LINE_STRIP);
for i: = 0 to 6 doglVertex2f ( 2 * (50.0 + (i * 50. 0)) / ClientWidth — 1. 0, 75. 0 / ClientHeight);
glEnd;
// Четвертий рядок — аналогічний результат,але 6 отдельньк відрізків
for i: = 0 to 5 do
drawOneLine (50. 0 + i * 50. 0, 50. 0,50. 0 + (i+l) * 50. 0, 50. 0); // п'ятий рядок — малюється один штрихпунктирнийвідрізок, множник = 5 glLineStipple (5 $1С47);
drawOneLine (50.0, 25.0, 350.0, 25.0);
Після виконання побудови такогоалгоритму ми отримаємо з ліній картинку, що буду нагадувати бенгальський вогник.
glEnable (GL_LINE_STIPPLE) ;
For i := 1 to 100 do begin
glColor3f (random, random, random);
glLineStipple (random (5), random($FFFF) );
glBegin (GL_LINES);
glVertex2f (xpos, ypos);
glVertex2f (xpos + 0.5 * random * sin (random(360)),
ypos + 0.5 * random * cos (random(360)));
glEnd;
end;
2.Графічна бібліотека DirectX
БібліотекаDirectX, істотно розширює мультимедійні можливості комп'ютера. DirectXзабезпечує доступ до функцій дисплея і аудіоплати, які дозволяють реалізувати впрограмах реалістичну тривимірну графіку і вражаючі музичні і звукові ефекти.DirectX є набором інтерфейсів прикладного програмування (API), що забезпечуютьдля програм Windows підтримку високопродуктивних технологій мультимедіа запаратним прискоренням. Графічна бібліотека DirectX використовується впрограмному середовищі Delphi для відтворення та підключення Файли з раструDirectX, що надає зображенню багато — кольорової гами. DirectX бібліотекавзаємодіє з іншими бібліотеками фірми Microsoft, його функція читання раструзаснована на коді для методів класу TBitmap у бібліотеці DirectX. За допомогоютакої досить потужної графічної бібліотеки можна утворювати декілька текстур наодній формі наприклад в зображенні такого зображення як земля вид з космосуякий ми бачимо на рис. 1.
/>
(рис. 1)
Дана бібліотека має свою базу вже готових зображень — цеможуть бути різного виду фігури, предмети тощо, для того, щоб їх добавити допроекту необхідно знати лише код даної фігури. Також DirectX дозволяє точновизначити апаратні можливості комп'ютера, а потім встановлює відповідніпараметри додатку. Це дозволяє виконувати мультимедійні програми на будь-якомукомп'ютері під управлінням операційної системи Windows з устаткуванням ідрайверами, сумісними з DirectX, а також забезпечує оптимальне використовуванняустаткування цими програмами. API-інтерфейси DirectX забезпечують доступ доновітніх можливостей високопродуктивних пристроїв, таких як мікросхемиприскорення тривимірної графіки і звукова платня. Ці інтерфейси управляютьфункціями нижнього рівня, у тому числі прискоренням двовимірної графіки,підтримкою пристроїв введення, таких, як джойстик, клавіатура і миша, а також мікшируваннямі висновком звуку.
3. Засобами бібліотеки Opengl побудувати довільнукількість довільного розміру точок на поверхні форми
Використавши програмне забезпечення Delphi я побудувавдовільну кількість точок на поверхні форми згідно варіанту використавши такийнабір алгоритмів даної програми щодо побудування точок на формі надавши точкамрізного кольору, лістинг програми матиме такий вигляд:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
hrc: HGLRC;
end;
var
frmGL: TfrmGL;
Vert:array[1..6,1..10] of GLfloat; //оголосили масив з параметрами10-ти точок
mx,my:byte; //коефіцієнти збільшення/зменшення
implementation
{$R *.DFM}
procedure TfrmGL.FormPaint(Sender: TObject);
var
i:byte;
begin
wglMakeCurrent(Canvas.Handle, hrc); //Встановили контекствідображення
glViewPort (0, 0, ClientWidth, ClientHeight); // встановилиобласть відображення
glClearColor (0.5, 0.5, 0.5, 1.0); // задали колір фону
glClear (GL_COLOR_BUFFER_BIT); // Очистили буфер кольору
glEnable(GL_POINT_SMOOTH); //активізувати згладжуванняточок
glScalef (my/mx, -my/mx, 1.0); //виконуємо масштабування
for i:= 1 to 10 do
begin
glPointSize (vert[4,i]); // задали розмір точки
glColor3f (vert[1,i], vert[2,i], vert[3,i]); // задаликолір для примітивів
glBegin (GL_POINTS); // розпочинаємо побудову
glVertex2f (vert[5,i],vert[6,i]); //будуємо точку
glEnd; // закінчуємо побудову
end;
glScalef (mx/my, -mx/my, 1.0); //повертаємо систему впочаткове положення
SwapBuffers(Canvas.Handle); // вміст буферу виводимо наекран
wglMakeCurrent(0, 0); //вивілбняємо контекст відображення
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_OPENGL orPFD_DOUBLEBUFFER; //встановили флаги
nPixelFormat := ChoosePixelFormat (hdc, @pfd); //активізувалиформат пікселя для нашого контексту відображення
SetPixelFormat (hdc, nPixelFormat, @pfd); //встіновилиформат вікселя
end;
{Создание формы}
procedure TfrmGL.FormCreate(Sender: TObject);
var
i:byte; //кількість точок на екрані
begin
SetDCPixelFormat(Canvas.Handle); //встановили форматпікселя
hrc := wglCreateContext(Canvas.Handle); //створили контекствдображення
randomize; //активізувати генератор випадкових змінних
for i:= 1 to 10 do
begin
vert[1,i]:=Random(10)/10; //R встановити коефіцієнтикольору
vert[2,i]:=Random(10)/10; //G
vert[3,i]:=Random(10)/10; //B
vert[4,i]:=random(30); //pointSize
vert[5,i]:=(random(10)-random(10))/10; //X
vert[6,i]:=(random(10)-random(10))/10; //Y
end;
mx:=10; my:=10;
end;
Для попереднього практичного завдання варіантузабезпечити операцію масштабування використовуючи клавіші “+” та “-“
Далі згідно варіанту необхідно, щоб довільна кількістьточок наближалась за допомогою натиску на клавішу і таким же чином точкивіддалялися тобто виконувалося масштабування. Для більшої зручності ми виберемоклавіші на клавіатурі “+” та “-“, що само собою вже підрозумовує наближення тавіддалення. Для вже існуючого лістингу вище вказаного допишемо такий алгоритмдій:
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc); //знищили контекст відображення
end;
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
FormPaint(Sender);
end;
end.
Після написання цих команд програма буде виконувати масштабуваннядовільної кількості точок на формі, які вказані на рис.1 та рис. 2:
/>
(рис. 1)

На рис. 1 показане вже генерована програма яка виконує масштабуваннявіддалення при натиску на клавішу “-“, на рис.2 ви бачите наближення довільнихточок при натиску на клавішу “+”
/>
(рис. 2)

Список використаної літератури
1.Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.:Видавництво “Юніор”, 2004. – 456с., іл.
2.С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002
3.OpenGl, технология ставшая символов, Учебник в примерах.
4.Конспект лекцій.


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

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

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

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