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


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

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
Контрольна робота
з предмета “ Комп’ютерна графіка ”
(варіант №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 мильонов к студенческой карме :

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

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

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

Реферат Оценка персонала в общеобразовательном учреждении
Реферат Макет фонтанной арматуры
Реферат Социология культуры история культуры и предмет
Реферат Бухгалтерский баланс, его строение и содержание. Типовые изменения в балансе
Реферат Принцип контраста как основа формирования музыкальной композиции Концерта для смешанного хора "Лебедушка" В. Салманова
Реферат 3. Структура управления доу
Реферат «Розробка технології та організація масового виробництва голографічних елементів для захисту товарів та документів від підробки»
Реферат «Формирование межличностных отношений в детском коллективе»
Реферат Основные этапы монтажа аппаратуры автоматического регулирования и управления
Реферат Анализ финансовой устойчивости предприятия и пути его повышения
Реферат Особливості занять з образотворчого мистецтва у першому класі
Реферат The Failure Of Welfare Reform Essay Research
Реферат Nuclear Weapons Essay Research Paper Even though
Реферат Розвиток Енергетики В Україні
Реферат I. Краткий экскурс в историю психологии Чтобы более четко представлять путь развития психологии как науки, кратко рассмотрим основные ее этапы и направле­ния