Технология OpenGl у комп'ютерній графіці

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 28.10.2009
Размер файла 939,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

14

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

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

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

з предмета “ Комп'ютерна графіка ”

(варіант №21)

Виконав:

студент групи ПЗС-505

Сушицький В.В.

м. Бердичів

2008 р.

Зміст

1. Основні типи проекції

2. Поняття контексту відображення та пристрою в бібліотеці Opengl

3. Засобами бібліотеки Opengl побудувати довільну кількість довільного розміру точок на поверхні форми

4. Для попереднього практичного завдання вашого варіанту забезпечити операцію маштабування використовуючи клавіши “+” та “-“

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

1. Основні типи проекції

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

Паралельну проекцію можна також вважати різновидом центральної, для якої точка сходу променів проектування розташовується в безкінечності.

Аксонометрична проекція -- це різновид паралельної проекції. Для неї всі промені проектування розташовуються під прямим кутом до площини проектування. На рис. 2.16 надано приклад зображення каркасу куба та осей координат в аксонометричній проекції.

Розглянемо, як виконати проектування, щоб побудувати таке зображення. Уведемо нову систему координат (X, Y, Z), повернуту відносно системи (х, у, z) на кути та Розташуємо площину проектування паралельно площині .X0Y на відстані Zпл. Позначимо координати в площині проектування як ХПР та YПР (рис. 2.17).

Нам потрібно знайти співвідношення між координатами (х, у, z) та координатами (ХПР , YПР) для будь-якої точки в тривимірному просторі.

Спочатку можна вказати на окремий тривіальний випадок, коли координати проекції співпадають із світовими, тобто ХПР = х, YПP = у. Це буде вид зверху -- для нього кути повороту = 0, = 0.

Тепер розглянемо перетворення системи координат (х, у, z) у систему (X, Y, Z) для довільних кутів (, ). Визначимо це перетворення двома кроками.

1-й крок. Поворот системи координат відносно осі z на кут -- отримуємо систему координат (х', у', z' ). Такий поворот осей описується матрицею

Оскільки площина проектування розташовується паралельно площині (X0Y), а промені проектування перпендикулярні цій площині, то

Можна назвати систему координат (X, Y, Z) видовою системою координат. Вона визначає ракурс показу. Тривимірна система координат проекції (XПР, YПР, ZПР ) зсунута відносно системи (X, Y, Z) на Znл. Для візуалізації зображення достатньо знати двовимірні координати ХПР та YПР.

Як ви вважаєте, чи буде отримана та ж сама проекція, якщо описувати видове перетворення координат тими ж двома кроками, але в іншій послідовності -- спочатку поворот системи координат відносно осі х на кут , а потім поворот системи координат відносно осі z' на кут ? І чи будуть вертикальні лінії у системі координат (х, у, z) рисуватися також вертикальними в системі координат (X, Y, Z)? Інакше кажучи, чи виконується А*В = В*А?

Ракурс показу і видове перетворення. У розглянутому вище прикладі видове перетворення координат -- це тільки повороти. Центральний промінь проектування тут спрямований з центру координат (х, у, z) у центр (X, Y, Z). Але зовсім не обов'язково, щоб центр координат розташовувався в центрі площини проектування.

Для формування зображення об'єктів тривимірного простору в будь-якому ракурсі необхідно виконати відповідне видове перетворення. Розглянемо це на наступному прикладі.

Нехай камера (або спостерігач) розташовується в точці простору з координатами (хс, ус, zc). Уведемо також кути нахилу камери ( та ) так, як вже було розглянуто вище. Будемо вважати, що точка спостереження знаходиться на осі Z видових координат, а напрямок зору -- протилежно напрямку осі Z (рис. 2.18).

Запишемо перетворення із системи координат опису об'єктів у видові координати

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

Розглянемо ще один приклад видового перетворення. Нехай потрібно змоделювати камеру, яка дивиться в точку простору (хр, ур, zp) із відстані d. Кути нахилу камери задано значеннями та . Рішення -- матриця видового перетворення координат

дорівнює добутку таких матриць:

У загальному випадку видове перетворення є тривимірним афінним перетворенням координат. Видове афінне перетворення включає в себе повороти, зсув, а якщо потрібно -- то і розтягнення/стискання. Це дозволяє імітувати повороти камери, розташування камери в потрібному місці та збільшення/зменшення. Найбільш наочно це виглядає в перспективній проекції.

2. Поняття контексту відображення та пристрою в бібліотеці Opengl

Поняття контексту введено для опису того, де буде рисуватися зображення. Іншими словами, контекст графічного пристрою вказує площину відображення, на яку робиться графічний вивід. В якості контексту може бути вікно програми на екрані дисплею, або сторінка принтера, або інше місце, куди можливо спрямувати графічний вивід. Для відповіді на ці питання звернемо увагу на чудову властивість висновку в Windows, що полягає в тому, що одними і тими ж функціями здійснюється висновок на різні пристрої. Рядки програми

Forml. Canvas. Ellipse (0, 0, 100, 100);

Printer. BeginDoc;Printer. Canvas.

Ellipse (0, 0, 100, 100);

Printer. EndDoc;

малюють один і той же круг як на поверхні форми, так і в роздруковуваному документі, на різних пристроях, причому якщо ми виводитимемо різнокольорову картинку на монохромний принтер, він справиться з цією задачею, передаючи кольори відтінками сірого. Навіть якщо ми малюємо тільки на полі форми, ми маємо справу з різними пристроями - нам невідомо, яка графічна платня комп'ютера і які характеристики поточної установки настройок екрану. Наприклад, маючи в своєму розпорядженні більше 16 мільйонів кольорів, додаток не піклується про відображення цієї багатої палітри на екрані, що має свій в розпорядженні всього 256 кольори. Такі питання додаток перекладає на плечі OpenGL Графіка в проектах Delphi раціонної системи, вирішальної їх за допомогою використовування драйверів пристроїв. Для того, щоб скористатися функціями відтворення Windows, додатку необхідно тільки вказати посилання на контекст пристрою, що містить засоби і характеристики пристрою висновку. Довідковий файл Win32 Programmer's Reference фірми Microsoft, що поставляється у складі Delphi, про контекст пристрою повідомляє наступне "Контекст пристрою є структурою, яка визначає комплект графічних об'єктів і пов'язаних з ними атрибутів і графічні режими, що впливають на висновок Графічний об'єкт включає олівець для зображення лінії, кисть для зафарбовування і заповнення, растр для копіювання або прокрутки частин екрану, палітру для визначення комплекту доступних кольорів, області для відсікання і інших операцій, маршрут для операцій малювання". Графічна система OpenGL, як і будь-який інший додаток Windows (хоча і розміщене в DLL), також потребує посилання на пристрій, на який здійснюватиметься висновок Це спеціальне посилання на контекст відтворення, - величина типа HGLRC (Handle openGL Rendering Context, посилання на контекст відтворення OpenGL). Зауваження Контекст пристрою Windows містить інформацію, що відноситься до графічних компонентів GDI, а контекст відтворення містить інформацію, що відноситься до OpenGL, т e грає таку ж роль, що і контекст пристрою для GDI Зокрема, згадані контексти є сховищами стану системи, наприклад, бережуть інформацію про поточний колір олівця

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 or PFD_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

4. Для попереднього практичного завдання вашого варіанту забезпечити операцію маштабування використовуючи клавіши “+” та “-“

Далі згідно варіанту необхідно, щоб довільна кількість точок наближалась за допомогою натиску на клавішу і таким же чином точки віддалялися тобто виконувалося маштабування. Для більшої зручності ми виберемо клавіші на клавіатурі “+” та “-“, що само собою вже підрозуміває наближення та віддалення. Для вже існуючого листингу вище вказаного допишемо такий алгоритм дій:

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. Конспект лекцій.


Подобные документы

  • Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.

    контрольная работа [2,3 M], добавлен 10.09.2009

  • Об'єктно-орієнтоване програмування за допомогою Delphi. Основні види проекцій. Поняття контексту відображення та пристрою в бібліотеці OpenGL. Побудова сфери засобами OpenGL: лістинг програми. Алгоритм операції збільшення та зменшення зображення.

    контрольная работа [268,6 K], добавлен 20.09.2009

  • Жанрові особливості портрету, як самостійного виду образотворчого мистецтва. Сучасне мистецтво комп'ютерної графіки. Система занять по оволодінню прийомами, техніками створення студентами портрету у програмі Photoshop, її функції та методи малювання.

    дипломная работа [7,1 M], добавлен 16.05.2012

  • Алгоритм побудови лінії та використання графічної бібліотеки DirectX. Способи побудови довільної кількості довільного розміру точок на поверхні форми. Можливості комп'ютера виконувати мультимедійні програми під управлінням операційної системи Windows.

    контрольная работа [416,9 K], добавлен 22.10.2009

  • Перетворення координат: афінне перетворення на площині, тривідерне афінне перетворення. Властивості афінного перетворення, його характерні особливості. Операції масштабування, переносу, повороту в бібліотеці Opengl на прикладі програми побудови фігури.

    контрольная работа [724,3 K], добавлен 12.09.2009

  • Программный код OpenGL. Синтаксис команд OpenGL. OpenGL как конечный автомат. Конвейер визуализации OpenGL. Библиотеки, относящиеся к OpenGL. Библиотека OpenGL. Подключаемые файлы. GLUT, инструментарий утилит библиотеки OpenGL.

    курсовая работа [304,9 K], добавлен 01.06.2004

  • Визначення поняття кольору, його опису і специфікації. Сприйняття кольорів з позицій фізики, видимий та невидимий спектр. Характеристика шкали яскравості, моделі кольорів. Однорідні для сприйняття кольорові простори. Системи впорядкування кольорів.

    реферат [16,8 K], добавлен 08.08.2011

  • Методи поліпшення растрових зображень. Параметри виду, буфер глубини, джерело світла в бібліотеці Opengl. Створення тривимірної фігурі та забезпечення її повороту при натисненні на "пробіл". Операції маштабування з використанням клавіш "плюс" та "мінус".

    контрольная работа [142,9 K], добавлен 22.09.2009

  • Методи поліпшення растрових зображень. Параметри виду, буфер глибини, джерело світла в бібліотеці Opengl. Створення тривимірної фігури та забезпечення її повороту за допомогою Opengl, виконання операції масштабування з використанням клавіші "+" та "-".

    контрольная работа [139,4 K], добавлен 12.09.2009

  • Аналіз сучасного програмного забезпечення комп'ютерних інформаційних мережевих систем. Загальна економіко-правова характеристика Бершадського відділення Вінницької філії ЗАТ КБ "ПриватБанк", захист інформації та дотримання безпеки в комп’ютерній мережі.

    курсовая работа [64,6 K], добавлен 14.05.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.