Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Графічні роботи на комп’ютері

Тип Реферат
Предмет Информатика и программирование
Просмотров
880
Размер файла
37 б
Поделиться

Ознакомительный фрагмент работы:

Графічні роботи на комп’ютері

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

Бердичівський політехнічний коледж

Контрольна робота

з дисципліни “Комп’ютерна графіка”

(варіант №20)

Виконав:

студент групи Пзс-604

Лифар Сергій Олександровчи

Перевірив:

Козик Вадим Юрієвич

м. Бердичів

2009 р.


Зміст

1. Алгоритм побудови ліній

2. Графічна бібліотека DirectX

3. Практичне завдання

Список використаної літератури


1. Алгоритм побудови ліній

Сформувати растрове зображення можна по-різному. Для того, щоб створити зображення на растровому дисплеї, можна просто скопіювати готовий растр у відеопам'ять. Цей растр може бути отриманий, наприклад, за допомогою сканера або цифрового фотоапарата. А можна створити зображення об'єктів просторових сцен шляхом послідовного рисування окремих простих елементів.

Прості елементи, які можна використати для візуалізації об'єктів, будемо називати графічними примітивами. Фактично, зображення об'єктів складається з геометричних елементів. Тут необхідно зробити таке зауваження. Для того щоб чітко уявляти суть речей, потрібно відрізняти візуалізацію об'єктів від опису, моделі об'єктів. Для опису об'єктів також можуть використовуватися деякі геометричні елементи, однак це — примітиви для опису у базі даних. Зручно, коли набір елементів опису об'єктів у базі той самий, як і набір графічних примітивів візуалізації — це значно спрощує процес візуалізації. Однак, у загальному випадку, елементи опису об'єктів відрізняються від графічних примітивів.

Найпростішим і, водночас, найбільш універсальним растровим графічним примітивом є піксел. Будь-яке растрове зображення можна нарисувати за допомогою пікселах, але це складно й довго. Необхідні складніші елементи, для яких рисуються відразу декілька пікселів.

Розглянемо графічні примітиви, які використовуються найчастіше часто в сучасних графічних системах, — це лінії й фігури.

Алгоритми виводу прямої лінії.

Розглянемо растрові алгоритми для відрізків прямої лінії. Припустимо, що задано координати (х1, у1 - х2, у2) кінців відрізка прямої. Для виводу лінії необхідно зафарбувати в певний колір усі піксели вздовж лінії. Для того щоб зафарбувати кожний піксел, необхідно знати його координати.

Найбільш просто нарисувати відрізок горизонтальної лінії:

for (х = х1; х <= х2; х++)//піксел (x, y1)

Обчислення поточних координат піксела тут виконується як прирощення по х (необхідно, щоб х1 ≤ х2), а вивід піксела забезпечується функцією Піксел( ). Оскільки в мові С, С++ для назви функції не можна використовувати кирилицю, то будемо далі використовувати її як коментар.

Аналогічно рисується відрізок вертикалі:

for (y = y1; х <= y2; y++)//піксел (x1, y)

Як бачимо, в циклі виводу горизонтального та вертикального відрізків виконуються найпростіші операції – прирощення на одиницю, перевірка на "<=", та запис піксела у буфер растра. Тому операція рисування таких відрізків виконується швидко та просто, її використовують як базову операцію для інших операцій, наприклад, в алгоритмах заповнення площини полігонів.

Можна поставити таке запитання: яка лінія рисується швидше — горизонталь чи вертикаль? На перший погляд — однаково швидко. Якщо враховувати тільки математичні аспекти, то швидкість повинна бути однаковою при однаковій довжині відрізків ліній, оскільки в обох випадках виконується однакова кількість однакових операцій. Але, якщо окрім обчислення координат аналізувати також вивід пікселів у конкретний растр, то можуть бути відмінності. У растрових системах рисування піксела зазвичай означає запис одного або декількох бітів у пам'ять, де зберігається растр. І тут вже не однаково — по рядках чи по стовпчиках заповнюється растр. Необхідно враховувати логічну організацію пам'яті комп'ютера, яка зберігає біти або байти растра. Навіть для комп'ютера одного типу (наприклад, персонального комп'ютера) для різних поколінь процесорів та пам'яті швидкість запису по сусідніх адресах може суттєво відрізнятися від швидкості запису по не сусідніх адресах. Особливо це помітно, коли для растра використовується віртуальна пам'ять із зберіганням окремих сторінок на диску та (або) в оперативній пам'яті (RАМ). При роботі графічних програм у середовищі операційної системи Windows часто трапляється так, що горизонталі рисуються швидше вертикалей, тому що в кожній сторінці пам'яті зберігаються сусідні байти — піксели вздовж горизонталі растра. Подібний ефект також мас місце при використанні кеш-пам'яті. А може бути, що RАМ достатньо, і навіть весь растр розміщується в кеші, а швидкості рисування все ж відрізняються. Наприклад, якщо використовується чорно-білий растр у форматі один біт на піксел, то для вертикалі бітова маска однакова для всіх пікселів лінії, а для горизонталі маску потрібно змінювати на кожному кроці. Тут необхідно зауважити, що рисування чорно-білих горизонталей можна суттєво прискорити, якщо записувати відразу вісім сусідніх пікселів — байт у пам'яті.

Горизонталі та вертикалі являють собою окремий випадок ліній. Розглянемо лінію загального виду. Для неї також необхідно обчислювати координати кожного піксела. Відомі декілька методів розрахунків координат точок лінії.

Пряме обчислення координат.

Нехай задані координати кінцевих точок відрізка прямої. Знайдемо координати точки всередині відрізка (мал. 1).


Запишемо співвідношення катетів для подібних прямокутних трикутників:

Перепишемо це співвідношення як x=f(y):

,

а також, як y=F(x):

У залежності від кута нахилу прямої виконується цикл по осі x або по y (мал. 2).


Мал. 2. Загальна схема алгоритму виводу відрізка прямої лінії

Наведемо приклад запису цього алгоритму на комп'ютерній мові програмування С, С++. Для скорочення тексту розглянемо фрагмент програми, де виконується цикл по осі х, причому x1>x2:

for (x=x1; x<=x2; x++)

{

y=y1+((x-x1)*(y2-y1))/(x2-x1);

//Піксел (x, y);

}

Тут усі операції виконуються над цілими числами. Подвійні скобки необхідні для того, щоб ділення виконувалося після множення. Недоліки такої програми — в циклі виконується багато зайвих операцій, присутні операції ділення та множення. Це обумовлює малу швидкість, роботи. Щодо зайвих операцій у циклі. Можна винести обчислення (у2‑у1)/(х2‑х1) за межі циклу, оскільки це значення не змінюється. Однак для цього необхідно вже використовувати операції над числами у форматі з плаваючою точкою:

float k;// або double чи long double

k = (float) (y2-y1) / (float) (x2-x1);

for (x = x1; x <= x2; x++)

{

y = y1 + (float) (x – x1) * k;

// Піксел (x, y);

}

Оскільки ми вирішили використати формат із плаваючою точкою, то спробуємо ще зменшити кількість операцій у циклі. Якщо розкрити дужки у виразі у = у1 + (х – х1) k; то' отримаємо у = у1 + х k – х1 k. Тут значення (y1- x1 k) є константою — ці операції також винесемо за межі циклу.

float yy, k;

k = (float) (y2 – y1) / (float) (x2-x1);

yy = (float) y1 – (float) x1*k;

for (x = x1; x <= x2; x++)

{

y = yy + (float) x*k;

// Піксел (x, y);

}

У циклі виконуються тільки дві арифметичні операції й перетворення х із цілого у формат float.

Якщо розглядати цикл обчислення у, по відповідних значеннях хі = х1, х1 +1, ..., х2 як ітеративний процес, то можна поставити таке запитання: чому дорівнює різниця (yi+1 –yi)? Вона дорівнює yi+1‑yi=x1+(xi+1‑x1)k‑x1‑(xi‑x1)k=(xi+1‑xi)k=k; оскільки xi+1‑xi=1. Різниця (yi+1 –yi) є константою, яка дорівнює k. Виходячи з цього, можна побудувати цикл таким чином:

float k;

k = (float)(y2-y1)/( float)(x2-x1);

y = y1;

for (x = x1; x <= x2; x++)

{

// Піксел (x, y);

y = k;

}

У тілі циклу е тільки одна операція для обчислення координати у (якщо не враховувати операції "<=" та "++").

Якщо порівнювати останній варіант із попереднім, то останній кращий за швидкодією. Також суттєво відрізняються способи обчислення координати у. В останньому варіанті значення у обчислюється додаванням прирощення k на кожному кроці, і на останньому кроці циклу (коли х = х2) повинно стати y = у2. Із суто математичних міркувань тут усе коректно, однак необхідно врахувати, що в програмі дробові числа репрезентуються у форматі з плаваючою точкою не точно. Окрім похибки представлення таких чисел, існує помилка виконання арифметичних операцій. Помилка залежить від розрядності мантис, і найменша – для long double, але все одно не нульова. З кожним кроком циклу помилки накопичуються, і може так статися, що у не дорівнюватиме у2 на останньому кроці. Це необхідно враховувати при використанні алгоритму.

Позитивні риси прямого обчислення координат.

Простота, ясність побудування алгоритму.

Можливість роботи з нецілими значеннями координат відрізка.

Недоліки.

Використання операцій із плаваючою точкою, або цілочислових операцій множення та ділення обумовлює малу швидкість. Однак це залежить від процесора, й для різних типів комп'ютерів може бути по-різному. У сучасних комп'ютерах, в яких процесори використовують ефективні засоби прискорення (наприклад, конвеєр арифметичних операцій з плаваючою точкою), час виконання цілочислових операцій вже не набагато менший. Для старих комп'ютерів різниця могла складати десятки разів, тому й намагалися розробляти алгоритми тільки на основі цілочислових операцій.

При обчисленні координат додаванням прирощень може накопичуватися помилка обчислень координат.

2. Графічна бібліотека DirectX

Що таке DirectX? Відповідь на це запитання дамо такою цитатою. DirectX - це набір низькорівневих програмних інтерфейсів (АРІ) для створення ігор та інших швидкісних мультимедійних програм. Розробником DirectX є Microsoft.

Надамо загальний перелік основних компонентів DirectX та їхнє призначення.

Direct3D — підтримка 3D-графіки.

DirectАпітаtіоп — створення анімаційних ефектів.

DirectDraw — швидка двовимірна графіка на основі прямого доступу до відеопам'яті.

DirectInput — підтримка периферійних пристроїв -- джойстика, миші, клавіатури тощо.

DirectXMusic — обробка музичних даних.

DirectРІау — модемна комунікація й мережні інтерфейси програмування ігор.

DirectSetup — простий АРІ для встановлення компонентів DirectX.

DirectShow — відтворення ущільнених аудіо- та відеоданих.

DirectSound — програмування звуку і його відтворення.

Тут необхідно зауважити, що склад компонентів та їхні назви змінюються відповідно до версій DirectХ.

Можна відзначити швидку зміну версій DirectХ (особливо їхніх номерів). Суттєвим моментом є сумісність — програми, що розроблені для старих версій, коректно виконуються у середовищі нових версій DirectХ.

Поява DirectХ пов'язується із ОС Windows 95 OSR2. Окрім підтримки ігрових та мультимедійних програм, DirectХ інтегрується в операційну систему для її внутрішніх потреб, наприклад, для підтримки графічного інтерфейсу користувача. Кожна наступна версія Windows, як правило, постачається з відповідною версією DirectХ, проте, передбачена можливість встановлення нових версій DirectХ і на старі операційні системи.

Зробимо короткий огляд версій DirectХ. Розпочнемо із сьомої версії. Можна зазначити, що DirectХ 7 забезпечив доступ до усіх апаратних можливостей графічних процесорів сучасних відеоадаптерів (геометричні розрахунки, освітлення, мультитекстурування та bump-текстури, антіаліасінг тощо). Багато комп'ютерних ігор використовували інтерфейси DirectDraw та Direct3D сьомої версії. Проте, впровадженню DirectХ 7 у широку практику програмістів заважала надзвичайна складність програмування цього інтерфейсу. Багато хто віддавав перевагу OpenGL, що має набагато простіший та зрозуміліший інтерфейс (і це незважаючи на те, що Microsoft у своїх операційних системах явно робить преференцію для DirectХ).

З появою графічних процесорів, які підтримують шейдери (наприклад, АТІ Radeon 8500), стає актуальним удосконалення DirectХ. Вже гостро відчувається обмеженість фіксованого конвеєра графічних команд, DirectХ повинен забезпечити доступ до програмованого конвеєра шейдерних мікропрограм GPU.

Восьма версія DirectХ (кінець 2000 р.) була значним кроком еволюції. З'явилася не тільки підтримка шейдерів, але суттєво змінилася загальна архітектура DirectХ. Зі складу DirectХ зник DirectDraw, і замість Direct3D зявився DirectX Graphics, який містить також функції колишнього DirectDraw. Завдяки цьому суттєво спростився інтерфейс для програмістів.

Версія DirectX 8.1 постачається у складі Windows XP та інших сучасних ОС. Основні відмінності від попередньої версії 8.0 – подальший розвиток шейдерних можливостей. Проте, мова програмування шейдерів є асемблероподібною й, отже, недуже зручною.

Наприкінці 2003 року з'явився DirectX 9. Головна відмінність – високорівнева мова програмування шейдерів.

Як дізнатися, яку версію DirectX встановлено на вашому комп’ютері? Для цього запустіть програму DxDiag.exe. ця програма знаходиться у папці WindowsSystem або WindowsSystem32 (у залежності від ОСWindows). Для отримання інформації про апаратні можливості вашого відеоадаптера ви можете використати таку програму, як 3DMark.

Є можливість оновлювати DirectX на комп’ютері. Для цього можна встановити необхідні файли, які поділяються на дві частини: runtime-файли і SDK (Software Developr Kit). Для розробки програм необхідні усі файли, а для запуску програм DirectX досить лише runtime-файлів.

SDK DirectX містить усі файли, необхідні для розробки програм, у першу чергу, це – файли заголовків (*.h) та бібліотеки для компіляторів (*.lib). крім того, до складу SDK також входить ряд прикладів програм та документація для розробки.

3. Практичне завдання.

Приклад файлу форми Delphi3 для побудови сфери:

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; var Key: Word;

Shift: TShiftState);

procedure FormResize(Sender: TObject);

procedure FormKeyPress(Sender: TObject; var Key: Char);

private

DC : HDC;

hrc: HGLRC;

ry : GLfloat;

tx : GLfloat;

end;

var

frmGL: TfrmGL;

mx,my:byte;

implementation

uses DGLUT;

{$R *.DFM}

procedure TfrmGL.FormPaint(Sender: TObject);

begin

glClear (GL_COLOR_BUFFER_BIT or GL_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);

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_OPENGL or 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;

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);

glRotatef(30.0, 1.0, 0.0, 0.0);

glRotatef(70.0, 0.0, 1.0, 0.0);

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. Тихомиров Ю. В. Программирование трехмерной графики в Visual C++. - Санкт-Петербург, 1998.

2. Майкл Янг. Программирование графики в Windows 95: Векторная графика на языке С++. 1997.

3. Шикин А. В., Боресков А. В. Компьютерная графика. Динамика, реалистические изображения. 1998.

4. Конспект лекцій.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Тгу им. Г. Р. Державина
Реферат сделан досрочно, преподавателю понравилось, я тоже в восторге. Спасибо Татьяне за ...
star star star star star
РЭУ им.Плеханово
Альберт хороший исполнитель, сделал реферат очень быстро, вечером заказала, утром уже все ...
star star star star star
ФЭК
Маринаааа, спасибо вам огромное! Вы профессионал своего дела! Рекомендую всем ✌🏽😎
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

Архитектура и организация конфигурации памяти вычислительной системы

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно