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

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

?р на одній формі наприклад в зображенні такого зображення як земля вид з космосу який ми бачимо на рис. 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 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;

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

 

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

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