2. Туман, тінь, відбиття в бібліотеці Opengl

В OpenGL передбачено декілька функцій для моделювання розповсюдження світла в об'ємі напівпрозорого середовища. Ви, напевно, помічали, що в тумані чим більша відстань від точки спостереження до об'єктів, тим більше колір об'єктів змішується з кольором туману. Починаючи з деякої відстані, об'єктів не видно зовсім — це можна вважати як повну заміну кольору віддалених об'єктів на колір туману (наприклад, сірий). Для цього можна використати функцію glFog. Ця функція дозволяє визначити властивість змішування кольорів об'єктів і туману в залежності від відстані до об'єкту.

Змішування виконується згідно з формулою: С =fCo + (1-f )Сf ,

де Со — колір об'єкту, Сf— колір туману, С — колір результату, f— функція, яка враховує відстань точки об'єкта до точки спостереження, а також густину середовища. В OpenGL передбачені декілька різновидів функції/ Розглянемо це.

Для визначення типу функції / треба викликати glFog із параметром GL_FOG_MODE, наприклад, так:

Що це означає? Експоненціальний варіант описується так:



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

Я взяла для виконання свого завдання програму Delphi і побудувала трикутник на формі придавши їй червоного кольору, при натиску змінює на рожевий, листинг програми матиме такий вигляд:

(мал. №1 )

(мал. №2 )

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 FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

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

private

hrc: HGLRC;

h : GLfloat;

end;

var

frmGL: TfrmGL;

Vert:array[1..6,1..10] of GLfloat;

mx,my:byte; //коефіцієнти збільшення/зменшення

implementation

{$R *.DFM}

procedure TfrmGL.FormPaint(Sender: TObject);

begin

wglMakeCurrent(Canvas.Handle, hrc);

glViewPort (0, 0, ClientWidth, ClientHeight);

glClearColor (0.5, 0.5, 0.75, 1.0);

glClear (GL_COLOR_BUFFER_BIT);

glColor3f (2.0, 0.0, 0.8); // текущий цвет примитивов

glBegin (GL_TRIANGLES);

glVertex3f (-1, -1, h);

glVertex3f (-1, 1, h);

glVertex3f (1, 0, h);

glEnd;

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

begin

SetDCPixelFormat(Canvas.Handle);

hrc := wglCreateContext(Canvas.Handle);

h := 0.0;

end;

procedure TfrmGL.FormDestroy(Sender: TObject);

begin

wglDeleteContext(hrc);

end;

procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

If Key = VK_ESCAPE then Close;

If Key = VK_SPACE then

begin

If ssShift in Shift

then h := h + 1

else h := h - 1;

Caption := Floattostr (h);

Refresh

end;

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.

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

Потім для точного виконання завдання виконала слідуючий алгоритм дій при цьому використала згідно варіанту клавіші «+» та «-», що по умові завдання виконують наближення та відділення фігури на фоні:

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. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004. – 456с., іл.

2. С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002

3. OpenGl, технология ставшая символов, Учебник в примерах.

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


Информация о работе «Отримання зображень з допомогою комп’ютерної графіки»
Раздел: Информатика, программирование
Количество знаков с пробелами: 9608
Количество таблиц: 0
Количество изображений: 11

Похожие работы

Скачать
24034
0
7

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

Скачать
47523
0
0

... відрізок, або робота команди не буде зупинена натисканням клавіші <ENTER>. Команду зручно використовувати при малюванні різного типу таблиць, специфікацій, зображення ліній технологічних матеріальних потоків і т.п. Основною незручністю при роботі з цим графічним примітивом являється складність його модифікації, тобто зміна ширини чи довжини полоси. Область Область – це частина площини, ...

Скачать
15395
0
3

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

Скачать
48511
1
17

... діяльність і оцінити, які підрозділи рентабельні, а які ні. Project Expert – інструмент оцінки запасу міцності бізнесу Рис. 13. Аналіз прибутковості підрозділів у Project Expert Однією з задач аналізу проекту є визначення чутливості моделі підприємства до змін різних параметрів. Чим ширше діапазон параметрів, у якому показники ефективності залишаються в межах прийнятних значень, тим вище ...

0 комментариев


Наверх