Побудова ліній та точок з допомогою комп’ютерної графіки
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
?р на одній формі наприклад в зображенні такого зображення як земля вид з космосу який ми бачимо на рис. 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. Конспект лекцій.