3. Використовуючи команди надбудови над OpenGl створити тривимірну фігуру та забезпечити її поворот при натисненні на кнопку пробіл

 

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

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;

mode : (POINT, LINE, FILL) = FILL; //режими відображення обєкта

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); //виконуємо перенесення

case mode of //вибираємо режим відображення

POINT : glPolygonMode (GL_FRONT_AND_BACK, GL_POINT);

LINE : glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);

FILL : glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);

end;

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;

If Key = 49 then begin

mode := POINT;

InvalidateRect(Handle, nil, False);

end;

If Key = 50 then begin

mode := LINE;

InvalidateRect(Handle, nil, False);

end;

If Key = 51 then begin

mode := FILL;

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); // перенос объекта - ось Z

glRotatef(30.0, 1.0, 0.0, 0.0); // поворот объекта - ось X

glRotatef(70.0, 0.0, 1.0, 0.0); // поворот объекта - ось Y

InvalidateRect(Handle, nil, False);

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. С.В. Глушаков, Г.А. Крабе Компютерная графика, Харьков 2002

2. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За _ед.. В.М.Горєва. – К.: Видавництво “Юніор”, 2004

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

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

5. Мережа Інтернет


Информация о работе «Методи поліпшення растрових зображень»
Раздел: Информатика, программирование
Количество знаков с пробелами: 19610
Количество таблиц: 0
Количество изображений: 3

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

Скачать
16844
0
5

... процесі фотовиведення. Можливі два шляхи вирішення цієї проблеми: 1. Усунення растрової структури оригіналу в процесі сканування й обробки. Для цього використовуються методи згладжування. Недоліки такого усунення: а) втрата різкості зображення; б) внаслідок різних кутів повороту растрових структур зображення для різних фарб, повне узгодження апертури дерастрування і растрової структури не ві ...

Скачать
191192
6
39

... принтера також містить різні мови опису даних (Adobe PostScript, PCL і тощо.). Ці мови знову ж таки призначені для того, щоб забрати частину роботи у комп'ютера і передати її принтеру. Розглянемо фізичний принцип дії окремих компонентів лазерного принтера. 2.5.29 Фотобарабан Як вже писалося вище, найважливішим конструктивним елементом лазерного принтера є фотобарабан, що обертається, за ...

Скачать
106641
28
1

... фотонасвітлювачі. 4. Офсетна попередньо чутлива пластина Для виготовлення друкарських офсетних форм позитивного копіювання. Схема технологічного процесу виготовлення офсетних друкарських форм для друкування журнальної продукції Ознайомлення з оригіналом і бажаннями замовника Складання тексту Сканування і обробка чорно-білих ілюстрацій Верстка журнальних сторінок ...

Скачать
62671
0
2

... країни (табл. 1). При цьому містобудівні об'єкти нижчого рівня формують організовану цілісність у рамках об'єктів вищого рівня. Ієрархічній структурі об'єктів відповідають стадії містобудівного проектування, які різняться між собою: - змістом завдань, які вони вирішують; - масштабом і характером технічної документації; - терміном проектування. При цьому в стадійності містобудівного ...

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


Наверх