Delphi FOR.NET жобаларында OPENGL-ді қолдану диплом жұмысы
№2100


 МАЗМҰНЫ
Кіріспе…………………………………………………………………....…4
1 ТАРАУ Delphi FOR.NET жобаларында OPENGL-ді қолдану
1.1 Құрылатын қосымшаның түрлері………………………....…..………6
1.2 Open GL кітапханасының негізгі құрылымы………………..…....….6
1.3 OpenGL-дің негізгі мүмкіндіктері………………………….…..……..7
1.4 OpenGl – кітапханасының құрылымы……..…………………....…….9
1.5 OpenGL-ді іске қосу…………………………….………………….…12
1.6 Екі өлшемді салулар………………………………………..…….…..14
1.7 Терендік буфері……………………………………..…………...……19
1.8 Delphідің алдынғы нұсқауларындағы ОpenGL………...………........23
1.9 Delphi.NET жобаларындағы OpenGL………………..………..…..…31
2 ТАРАУ OPENGL-ДІҢ НЕГІЗГІ ҚАСИЕТТЕРІ
2.1 Хабарлар, аударымдар, жағдайлар…………………………..…..…37
2.2 Неліктен Delphi қосымшасында үлкен өлшем болады....…....…...40
2.3 Delphi- де VCL-сіз программалау………………………………...41
2.4 Open GL типтері (түрлері)……………………………………….....43
2.5 OpenGL-дің құралдарымен Delphі компоненттерін шығару……..48
2.6 OpenGL-дің матрицалары………………………………………….52
Қорытынды……………………………………………………………………..58
Пайдаланылған әдебиеттер……………………………………………….…...59



Жұмыс түрі: Дипломдық жұмыс
Жұмыс көлемі: 58 бет
Пәні: Соңғы қосылған дипломдық жұмыстар

-----------------------------------------------------------------------------------

-----------------------------------------------------------------------------------
https://www.topreferat.com/
ДИПЛОМДЫҚ ЖҰМЫСТЫҢ ҚЫСҚАРТЫЛҒАН МӘТІНІ


Кіріспе…………………………………………………………………....…4
1 ТАРАУ Delphi FOR.NET жобаларында OPENGL-ді қолдану
1.1 Құрылатын қосымшаның түрлері………………………....…..………6
1.2 Open GL кітапханасының негізгі құрылымы………………..…....….6
1.3 OpenGL-дің негізгі мүмкіндіктері………………………….…..……..7
1.4 OpenGl – кітапханасының құрылымы……..…………………....…….9
1.5 OpenGL-ді іске қосу…………………………….………………….…12
1.6 Екі өлшемді салулар………………………………………..…….…..14
1.7 Терендік буфері……………………………………..…………...……19
1.8 Delphідің алдынғы нұсқауларындағы ОpenGL………...………........23
1.9 Delphi.NET жобаларындағы OpenGL………………..………..…..…31
2 ТАРАУ OPENGL-ДІҢ НЕГІЗГІ ҚАСИЕТТЕРІ
2.1 Хабарлар, аударымдар, жағдайлар…………………………..…..…37
2.2 Неліктен Delphi қосымшасында үлкен өлшем болады....…....…...40
2.3 Delphi- де VCL-сіз программалау………………………………...41
2.4 Open GL типтері (түрлері)……………………………………….....43
2.5 OpenGL-дің құралдарымен Delphі компоненттерін шығару……..48
2.6 OpenGL-дің матрицалары………………………………………….52
Қорытынды……………………………………………………………………..58
Пайдаланылған әдебиеттер……………………………………………….…...59
КІРІСПЕ
Бағдарламалаушы қосымшаны жасауға кіріскенде, оның алдында: “өз компоненттерімді құрсам
Сапалы бағдарламалық қамтамасыз ету қолданушылық және бадарламалық код деңгейінде
Әсіресе, бұл сұрақ визуалдау мен графиканың өнімділігі жоғары құрылғыларын
Сапасы жоғары графика қосымшаның сыртқы көрінісі мен деңгейін (дәрежесін)
Қарапайым қосымшаны жазған кезде көпшілігі тегін болса да қандай
Open GL компьютерлік графика саласындағы стандарттардың бірі болып саналады.
Open GL негізінде (әртүрлі) күрделілік деңгейі әртүрлі қосымшаларды құру
Бұл жұмыста Open GL-дің графикасын қолданығысы келетін Delphi-ді қолданатын
Сондықтан жұмыстың нақты мақсаты Delphi.Net жобаларында Open GL графикалық
OpenGL (Open Graphics Library) ашық графикалық стандарт, яғни
Ендеше OpenGL дегеніміз не? – деген сұраққа жауап берейік:
OpenGL ішкі құрамы терең ойластырылған структурадан және қарапайым процедуралық
1 ТАРАУ DELPHI FOR.NET ЖОБАЛАРЫНДА OPENGL-ДІ ҚОЛДАНУ
Құрылатын қосымшаның түрлері
Delphi мен біреге (көптеген) қызіргі бағдарламалау тілдернің көпшілігінің жаңа
Borland корпорациясы ұсынған VCL кітапханасы Delphiдің 8-ші нұсқасына дейін
Өңдеудің жаңа ортасын меңгерумен бір уақытта орындалатын мұндай ауысу
Open GL кітапханасының негізгі құрылымы
Open GL-дің құрылымы қарастырайық.
Кітапхан C:\WINDOWS\SYSTEM32\Opengl32.dll жүйелі бумасында орналасқан және Microsoft Windows операциялық
Open GL(байынша)-дің кейбір дереккөздерінен графиканы шығарудағы интерфейстің негізгі элементі
Opengl32.dll мен gln32.dll файлдарында сіздің қосымшаңызбен (тұтынушы, клиент, қолданушы)
Келесі бөлімді жазудың маңызды бір себебі бар. Delphі, Net-ке
1.3 OpenGL-дің негізгі мүмкіндіктері
Кейбір OpenGL бибилиотекаларының ішіне (мысалы X Windows) үш өлшемді
OpenGL-дің негізгі мүмкіндіктері төмендегідей:
Геометриялық және растрлық (түрлі-түсті) негіздер, осынын арқасында үш өлшемді
В-сплайндарды қолдану – нүктелер арасынан қисық сызық сызу қабілеті
Түрдік және модельдік құрылымдар – олар арқылы кеңістікте үш
Түспен жұмыс – OpenGL библиотекасы бағдарламашыға RGBA (қызыл-жасыл-көк-альфа) түстерімен
Көрінбейтін сызықтарды және денелерді жою қабілеті (Z-буферизация).
Екілік буферизация – Денелерді экранға шығарған кезінде, экранның беті
Текстура құру. Объектіге шындық көрінісін береді. Мысады домалақ объектінің
Туралау. Объектінің үстінде, жан-жағындағы қисық сызылған ойық немесе қырларды
Жарық сәуле беру. Кеңістікте жарық көздерін орнату – жарық
Ауа райы құбылыстары. Тұман, түтін, т.б. ауа райы құбылыстарды
Объектілерге айқындық қабілет беру.
Суреттердің тізбелерімен жұмыс.
Қосымша OpenGL библиотекаларды қолдану
Модельдеу үшін OpenGL библиотекасында барлық мүмкіндіктердің барлығына қарамастан, үш
Солардын бірі GLU атты бибилиотека болып келеді. Осы библиотека
Қазіргі кезде көптеген библиотекалар шығарылып, қолданылып жатыр. Олар әртүрлі
1.4 OpenGl – кітапханасының құрылымы
Төменде көрсетілген 1.4.1-сурет Book3D – атымен сақталған Delphi проектісінде
Book3D – бағдарламасы бірнеше құрылымдарардан тұрады.
Book3D – редактор, программа коды орындалу барысында нәтижесін көрсетеді.
Листинг программасы (код) – параметрлерді өзгеру барысында немесе нақты
3. (Help) Листингте қолданылатын процедуралар мен командалар анықтамалығы.
4. Глоссарий – бұл жерде OpenGl командалары мен
1.4.1 сурет. OpenGL кітапханасының командалардың қызметі мен түсіндірмесі.
OpenGL-ді үйрену – оқу бағдарламасы таңдалады.
Түсініктеме – бастамаларға өту (экранның сол жағында).
Бағдарламалар коды – команда анықтамалығы (бірінші бөлім –
Бағдарлама – бұл бөлім оқу бағдарламасын таңдағанда активті болады.
Программа кодын орындау - оқу бағдарламасында таңдалған ағымдағы
ПРограмманы тоқтату – бағдарлама орындалуы тоқтатылды. “OpenGL-ді үйрену ”
Бағдарлама кодын сақтау - бағдарлама кодын HTML немесе
бағдарлама кодын баспадан шығару – стандартты баспа диалогын шығарады
Book3D-редактор - > в файл – Book3D – редакторды
Жүктеу - әрқашан қолайлы 2 ішкі пунктен тұратын пункт
1. Соңғы программаны жүктеу – соңғы оқылған программаны жүктейді,
2. Book3D+HTML программасын жүктеу –Book3D бағдарламасында Программа\Сақтау код программасы
Жөндеу – шрифт өлшемін өзгертуге, құжат түсін таңдауға болатын
Программа туралы – Book3D бағдарламасының авторы туралы қысқаша мәлімет.
Интерфейсті сипаттау. Барлық интерфейс шартты түрде екі сплиттерге бөлінген
Программанның сол жақ бөлігі үш белгіден тұрады:
Негізгі терезе – бұл программаның ең негізгі бөлімі, ол
Book3D-редактор - программанның коды орындалуының жұмыс нәтижесін көрсетеді, ал
1.4.2 сурет. OpenGl командаларын өзгерту панелі.
1. Көрсетілген тізім команда параметірлерін өзгертуге арналған қолайлы команда
2. Цифр, текст кодында командалардың реттік номері көрсетілген.
3. Ауыстыру кнопкасы - 1-ші пункте таңдалған тексттік
4. Ағымдағы командалардың параметірлерін өзгерту - өзгеру Book3D-редактор терезесінде
5. Ағымдағы кез-келген командаға түсіндірмелерін өзгерту және қосуға болады.
Коментарий – (түсіндірме) бұл белгіде оқу программасында таңдалған кеңестер
Программа кодын салыстыру терезесі – бұл жерде барлық оқу
Программанның оң жақ бөлігі екі белгіден тұрады:
1. Программа коды және Help командаларға көмек – жоғарғы
2. OpenGl-дің барлық командалары – бұл жерде OpenGl командаларының
1.5 OpenGL-ді іске қосу
Оқиға , хабарлау , сілтеме. " Оқиға " ұғымы
Код , Delphi жобасында жазылған OnCreate оқиғалары өңдеуші сияқты,
Сондай оқиғалар - операциялық жүйелердің хабарлардың ұқсастығы, мнемониканы
Барлық терезелердің өз құруында операциялық жүйеде тіркеледі және
Терезеге сілтемені тек қана операциялық жүйемен емес
Нақтылы түрде күрделі емес үлгіде терезеге сілтеме мысалын байқап
Delphi ең аз қосымшасын құрастырып және жаңа жобаны бастаңыздар.
procedure TForm2.ButtonlClick(Sender: TObject);
var
H : HWND; // терезеге сілтеме
begin
H := FindWindow ('TForm1', 'Form1'); // терезені іздейміз
If H <> 0 then ShowMessage ('Есть Form1!') //
else ShowMessage ('Нет Form1!') // терезе табылмады
end;
Енді кнопканы басқанда хабарлау береді, терезесі тобы ашық па,
Сонымен, терезеге сілтеме бір мағынада терезені анықтайды. Handle түрінің
Терезе фокус болмай жасай алады, хабарлаулар алу және
OnMouseMove формасын өңдеуші оқиғаны келесі түрге келтіріңіздер: (1-Ех-02)
procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer) ;
begin
Caption := 'x=' + IntToStr (X) + ', y='
// координаты курсора
end;
Тышқан курсоры қозғалысы кезінде форма тақырыбында оның
Бағдарламаның екі көшірмесін жіберіңіздер және назарды салыңыз, терезенің
Кнопканы шерту арқылы кодын өзгертеміз: (1-Ех-03)
procedure TForm2.ButtonlClick(Sender: TObject);
var
H : HWND;
begin
H := FindWindow ('TForml', ' Forml');
If H <> 0 then SendMessage (H, WM_CLOSE, 0,
end;
Неге Delphi қосымшалары үлкен мөлшерлі болады.
Ең аз қосымша , Delphi –дің әртүрлі версияларында
Пакеттердің қолдануы масштаб жобаларға арналған проблема өткірлігін маңызды шешеді,
Delphi арқылы қосымшаларды жазу жеңіл, мысалы интерфейстік элементтер
Бірақ орта деңгейлі қосымшаларды қолданбайды және бұл қуатты мүмкіншіліктерге
Мұнда нағыз жұмыс – құрастырушы емес , Delphi құрастырушысы
1.6 Екі өлшемді салулар
Примитив және атрибуттар
Компьютерлерде істейтін көп мамандардың арасында «Примитив деп нені санау
Минималды жүйенін құрамына әдетте тек қана кесінді, көпбұрыш және
Осы пікірайқастын ортасында OpenGL-ді құрушылар ең қолайлы орын алды.
Объектілерді анықтау түрі төменде берілген:
glBegin();
glVertex*(...)?
glVertex*(...);
glEnd();
< ivw7> көрсеткіші объектінің түрін анықтап, OpenGL-ге төбелер тізімін
(GL_LINES) кесінділері
GL LINES түрі кесіндінін екі төбеден құрылғандығын анықтап беретін,
Сынық кесінділері (GLLINESTRIP)
Бірімен бірі қосылып келетін кесінділерді қолданып, (polyline) – сынық
Түстін (түрін) атрибуттарын анықтау
Біз түрлі варианттарда қарастыратын Серпинский оюын құрайтын программаның
glClearColor():
glClearColorA.0, 1.0, 1.0, 1.0);
Бұл мән көптеген програмисстерге таныс {background color) функциясына ұқсас
Нүктелердің түсінің көрінісі glColor3f () функциясы арқылы орнатылады.
Төменде келтірілген оператор арқылы келе жатқан түс орнатылады.
glColor3fA.0, 0.0, 0.0);
Примитив «нүктенің» өлшемін өзгертсек те болады. Бұны OpenGL-дегі
glPointSizeB.0);
Графикалық элементтердің (объектілердің) мәндерін – нүкте үлкендігі, сызық қалыңдығы,
Осымен әртүрлі мониторлармен жабдықталған компьютерлерде бағдарлама орындалған кезде, біршама
Бірқатар графикалық АРІ-лерде барлық өлшемдер бірлік жүйесі бойынша беріледі.
Нүктелер мен кесінділер
Нүкте. OpenGl – облысының сол жақ төменгі бұрыш координаталары
glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода
glPointSize (20); // нүктенің өлшемі
glColor3f (1. 0, 1. 0, 1. 0); // кескіннің
glBegin (GL_POINTS); // командалық жақшаны ашамыз
glVertex2f (-1, -1); // сол жақ төменгі бұрыш
glVertex2f (-1, 1); // сол жақ жоғарғы бұрыш
glVertex2f (0, 0);
glVertex2f (1, -1);
glVertex2f (1, 1);
glEnd; SwapBuffers(Canvas. Handle)
Кесінді. Нүктеден енді кесіндіге өтеміз. Келесі мүмкіндікті қарастырамыз. Константа
glBegin (GL_LINES);
glVertex2f (-1, 1);
glVertex2f (1, -1);
glVertex2f (-1, -1);
glVertex2f (1, 1);
glEnd;
Терезеде диоганал бойынша бұрыштарды біріктіретін екі кесінді сызылады. Кесіндінің
glBegin (GL_LINE_STRIP);
glVertex2f (-1, -1);
glVertex2f (-1, 1);
glVertex2f (1, 1);
glVertex2f (1, -1);
glEnd
Нәтижесі терезенің шекарасында П-әрпі шығады. Ал GL_LINE_LOOP дәл осы
Үшбұрыштар мен көпбұрыштар
Үшбұрыш. Сызықтардан кейін GLJTRIANGLES константантамен берілген үшбұрышқа өтеміз.
glBegin (GLJTRIANGLES) ;
glVertex2f (-1, -1);
glVertex2f (-1, 1);
glVertex2f (1, 0);
glEnd;
Сол сияқты GL_TRIANGLE_STRIP константасы байланысқан топ үшбұрышы. Бастапқы үш
Көпбұрыш. Жазықтықта тік бұрышты салу үшін glRect командасын
glBegin (GL_QUADS);
glColor3f (random, random, random);
glVertex2f (-0. 6, 0. 2);
glVertex2f (-0. 7, 0. 7);
glVertex2f (0. 1, 0. 65);
glVertex2f (0. 25, -0. 78);
glColor3f (random, random, random);
glVertex2f (0. 3, -0. 6);
glVertex2f (0. 45, 0. 7);
glVertex2f (0. 8, 0. 65);
glVertex2f (0. 9, -0. 8);
glEnd;
Константа GL_QUAD_STRIP үш төбеден төртбұрыш, төрт төбеден бесбұрыш жасайды
1.7 Терендік буфері
Мәтіндік жүргізуді құру кезінде, пиксел параметірінің көрсеткішінің санына, OpenGL
Буферлермен жұмыс істеуге алда толығырақ қарастырамыз. Әзірше терендік буферінің
Кеңістіктік құрылымдарда тереңдік буферді қолданудан бас тартқан кезде, кеңістіктін
ProcedureAxes;
var
Color: Array [1.. 4] of GLFloat;
begin
glPushMatrix;
glGetFloatv (GL_CURRENT_COLOR, @Color),
glScalef (0. 5, 0. 5, 0. 5);
glColor3f (0, 1, 0);
glBegin (GL_LINES);
glVertex3f (0, 0, 0);
glVertex3f (3, 0, 0);
glVertex3f (0, 0, 0);
glVertex3f (0, 3, 0);
glVertex3f (0, 0, 0);
glVertex3f (0, 0, 3);
glEnd;
// Х әріпі
glBegin (GL_LINES)
glVertex3f (3. 1,-0. 2, 0. 5);
glVertex3f (3. 1,0. 2, 0. 1);
glVertex3f (3. 1,-0. 2, 0. 1);
glVertex3f (3. 1,0. 2, 0. 5);
glEnd;
// Y әріпі
glBegin (GL_LINES);
glVertex3f (0. 0, 3. 1, 0. 0);
glVertex3f (0. 0, 3. 1, -0. 1);
glVertex3f (0. 0, 3. 1, 0. 0);
glVertex3f (0. 1, 3. 1, 0. 1);
glVertex3f (0. 0, 3. 1, 0. 0);
glVertex3f (-0. 1, 3. 1, 0. 1);
glEnd;
// Z әріпі
glBegin (GL_LINES);
glVertex3f (0. 1, -0. 1, 3. 1);
glVertex3f (-0. 1, -0. 1, 3. 1);
glVertex3f (0. 1, 0. 1, 3. 1);
glVertex3f (-0. 1, 0. 1, 3. 1);
glVertex3f (-0. 1, -0. 1, 3. 1);
glVertex3f (0. 1, 0. 1, 3. 1);
glEnd;
// Ағымдағы түстін мағынасын қайта құрайық
glColor3f (Color [1], Color [2], Color [3])
glPopMatrix;
end;
Көңілді аударып қарасақ, остердің жасыл түспен сызылып жатқаның байқауға
Терендік буфердің қолданбайтын жағдайда кеңістік сахынасының көрінісінін тура еместігі
Келесі мысалда, Ex21 бағыныңқы каталогында, дәл осы сахына дұрыс
Енді дұрыс: остер кубтын шегін кесіп өтеді
Ойнау мәтіндегіні алғаннан кейін, OpenGL системасына – құрылыстын
glEnable (GL_DEPTH_TEST); терендікті сынау тәртібін іске қосамыз
Сахна коды екі буферді тазалаудан басталады: кадр буферін және
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // +терендік буфері
Дәл осылайша келесі құрылыстан алдын ала, сурет салудын үстін
OpenGL дің дайын үлгілері
OpenGL-дің бірнеше дайын үлгілері бар. Ол үлгілер дайын командалар
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(400, 400);
glutInitWindowPosition(50, 50);
glutCreateWindow(argv[0]);
Delphi жүйесінде бағдарлама жазатын программисттер де осы библиотеканын көмегінен
glutSolidCube (1. 0);
Кубтан басқа модуль (библиотеканың) құрамына саланы (сфераны), торды, конусты,
Бұдан басқа классикалық объектілерді суреттеу командалары да құрамына енеді,
mode: (POINT, LINE, FILL) = FILL;
glutobj: (CUBE, SPHERE, CONE, TORUS, DODECAHEDRON,
ICOSAHEDRON, TETRAHEDRON, TEAPOT) = CUBE;
Үнсіздік бойынша, тұтастай шекті кубтың мәні енгізілген. Сахынаны ойнаған
case mode of
POINT glPolygonMode (GL_FRONT_AND_BACK, GL_POINT);
LINE: glPolygonMode (GL_FRONT_ANDJ3ACK, GL_LINE);
FILL: glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
end;
case glutobj of
TEAPOT: glutSolidTeapot (1. 5);
CUBE: glutSolidCube (1. 5);
SPHERE: glutSolidSphere (1. 5, 20, 20);
CONE: glutSolidCone (0. 5, 1. 5. 20, 20);
TORUS: glutSolidTorus (0. 5, 1 5, 20, 20);
DODECAHEDRON: glutSolidDodecahedron;
ICOSAHEDRON: glutSolidIcosahedron;
TETRAHEDRON: glutSolidTetrahedron; end,
Бірінші үш цифрлі пернелерді басып, тәртіп орнатуға, төртінші цифрлі
If Key = 52 then begin
inc (glutobj); // установить следующее значение – ағымды мәнді
If glutobj > High (glutob]) then glutobj: = Low
InvalidateRect(Handle, nil, False);
Шәйнекті сызып отырған команданың өлшемдері, кубтын сызбасына сәйкес мәні
1.8 Delphідің алдынғы нұсқауларындағы ОpenGL
Егер сіз Delphі 6-ны қолдансаңыз барлық негізгі функциялары C:\programm
Көбінесе Opengl.pas-дің авторлары ұсынатын Delphi-дің мысалдары, келесі кодпен басталады:
unit SomeUnit;
uses SysUtils, Classes, Windows, OpenGL;
interface
implementation
end.
Бұл мысалдарда Delphi-нің стандартты модульдерімен Opengl.pas-тың модульдерін
Windows – қосымшаның Myapplication Opengl-ден атты жаңа жобасын құрамыз.
1.8.1 сурет. Қосымшаның негізгі формасының модулі.
Жобаны Opengl-ден импортталған барлық функциялар мен берілгендер типтері
Opengl кітапханасы бағдарламалаушы қолданатын тілдің құрамында болмайтын, өзіндік берілгендер
Opengl-дегі берілгендердің толық көрсетілген. Олардың кейбіреулерін өз
unit GLImports;
interface
type
// стандартты реттік типтері:
BOOL = System.LongBool;
DWORD = System.LongWord;
// контексті құрылғыға сілтеме:
HDC = type System.LongWord;
// контексті келтіру сілтеме:
HGLRC = type System.LongWord;
// Delphi түсіндірмесінде OpenGL типтері :
GLenum = System.Cardinal;
GLbyte = System.Shortint;
GLfloat = System.Single;
GLint = System.Integer;
GLsizei = System.Integer;
// пиксел форматы:
PPixelFormatDescriptor = ^TPixelFormatDescriptor;
TPixelFormatDescriptor = packed record
nSize: Word;
nVersion: Word;
dwFlags: DWORD;
iPixelType: Byte;
cColorBits: Byte;
cRedBits: Byte;
cRedShift: Byte;
cGreenBits: Byte;
cGreenShift: Byte;
cBlueBits: Byte;
cBlueShift: Byte;
cAlphaBits: Byte;
cAlphaShift: Byte;
cAccumBits: Byte;
cAccumRedBits: Byte;
cAccumGreenBits: Byte;
cAccumBlueBits: Byte;
cAccumAlphaBits: Byte;
cDepthBits: Byte;
cStencilBits: Byte;
cAuxBuffers: Byte;
iLayerType: Byte;
bReserved: Byte;
dwLayerMask: DWORD;
dwVisibleMask: DWORD;
dwDamageMask: DWORD;
end;
implementation
end.
Бұл жердегі (кейбір типтердің) Delphi-нің стандартты типтеріне
НДС пен HGLRC типтері, негізінде, system.рas модуліндегі THandle типіне
Бұл мысалда, код Windows.pas-тың стандартты модулінен алынған. Opengl
...
function wglCreateContext(DC: HDC): HGLRC;
function wglDeleteContext(p1: HGLRC): BOOL;
function wglMakeCurrent(DC: HDC; p2: HGLRC): BOOL;
...
Сондықтанда, Borland-тың бағдарламалаушылары осы және басқада функцияларды Opengl.pas
Егер сіз кодта {SEXTERNAL SYM <функция аты>}
...
procedure glBegin(mode: GLenum);
procedure glColor(red, green, blue: GLbyte);
procedure glEnd;
procedure glVertex2f(x, y: GLfloat);
procedure glViewport(x,y: GLint; width, height: GLsizei);
...
Операциялық жүйе gdi 32.dll файлында орналасқан өзінің
...
function ChoosePixelFormat(DC: HDC; p2: PPixelFormatDescriptor): Integer;
function SetPixelFormat(DC: HDC; PixelFormat: Integer; FormatDef: PPixelFormatDescriptor): BOOL;
...
Нәтижесінде CLImports модулі мына түрінде болады:
unit GLImports;
interface
type
// стандартты реттік типтері:
BOOL = System.LongBool;
DWORD = System.LongWord;
// контексті құрылғыға сілтеме:
HDC = type System.LongWord;
// контексті келтіру сілтеме:
HGLRC = type System.LongWord;
// Delphi түсіндірмесінде OpenGL типтері:
GLenum = System.Cardinal;
GLbyte = System.Shortint;
GLfloat = System.Single;
GLint = System.Integer;
GLsizei = System.Integer;
// пиксел форматы:
PPixelFormatDescriptor = ^TPixelFormatDescriptor;
TPixelFormatDescriptor = packed record
nSize: Word;
nVersion: Word;
dwFlags: DWORD;
iPixelType: Byte;
cColorBits: Byte;
cRedBits: Byte;
cRedShift: Byte;
cGreenBits: Byte;
cGreenShift: Byte;
cBlueBits: Byte;
cBlueShift: Byte;
cAlphaBits: Byte;
cAlphaShift: Byte;
cAccumBits: Byte;
cAccumRedBits: Byte;
cAccumGreenBits: Byte;
cAccumBlueBits: Byte;
cAccumAlphaBits: Byte;
cDepthBits: Byte;
cStencilBits: Byte;
cAuxBuffers: Byte;
iLayerType: Byte;
bReserved: Byte;
dwLayerMask: DWORD;
dwVisibleMask: DWORD;
dwDamageMask: DWORD;
end;
{ OpenGL }
function wglCreateContext(DC: HDC): HGLRC; stdcall;
function wglDeleteContext(p1: HGLRC): BOOL; stdcall;
function wglMakeCurrent(DC: HDC; p2: HGLRC): BOOL; stdcall;
procedure glBegin(mode: GLenum); stdcall;
procedure glColor(red, green, blue: GLbyte); stdcall;
procedure glEnd; stdcall;
procedure glVertex2f(x, y: GLfloat); stdcall;
procedure glViewport(x, y: GLint; width, height: GLsizei); stdcall;
{ GDI }
function ChoosePixelFormat(DC: HDC; p2: PPixelFormatDescriptor): Integer; stdcall;
function SetPixelFormat(DC: HDC; PixelFormat: Integer; FormatDef: PPixelFormatDescriptor): BOOL; stdcall;
const
GL_LINES = $0001;
gdi32 = 'gdi32.dll';
opengl32 = 'opengl32.dll';
implementation
{ OpenGL }
function wglCreateContext; external opengl32 name 'wglCreateContext';
function wglDeleteContext; external opengl32 name 'wglDeleteContext';
function wglMakeCurrent; external opengl32 name 'wglMakeCurrent';
procedure glBegin; external opengl32;
procedure glColor(red, green, blue: GLbyte); external opengl32 name 'glColor3b';
procedure glEnd; external opengl32;
procedure glVertex2f; external opengl32;
procedure glViewport; external opengl32;
{ GDI }
function ChoosePixelFormat; external gdi32 name 'ChoosePixelFormat';
function SetPixelFormat; external gdi32 name 'SetPixelFormat';
end.
UnitMainForm.pas қосымшасының негізгі формасының модуліне оралайық. Форманы құрғанда,
Форманы сызу оқиғасының диспечерлеу әдісін (FormPaint) қызыл диагональды
unit UnitMainForm;
interface
uses
Forms, GLImports;
type
TFormGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
rc: HGLRC;
end;
var
FormGL: TFormGL;
implementation
{$R *.dfm}
procedure TFormGL.FormCreate(Sender: TObject);
var
dc: HDC;
pfd: TPixelFormatDescriptor;
p2: PPixelFormatDescriptor;
PixelFormat: Integer;
begin
// пиксел формат орнату:
dc := Canvas.Handle;
FillChar(pfd, SizeOf(pfd), 0);
p2 := @pfd;
PixelFormat := ChoosePixelFormat(dc, p2);
SetPixelFormat(dc, PixelFormat, p2);
// OpenGL-ді келтіру контекстін орнату:
rc := wglCreateContext(Canvas.Handle);
end;
procedure TFormGL.FormPaint(Sender: TObject);
begin
// ағымдағы контекстің орындалуын орнату:
wglMakeCurrent(Canvas.Handle, rc);
// салу обласын орнату:
glViewport(0, 0, Self.ClientWidth, Self.ClientHeight);
glColor(127, 0, 0);
glBegin(GL_LINES);
glVertex2f(-1, -1);
glVertex2f(+1, +1);
glEnd;
// ағымдағы контекстің орындалуын жаңарту:
wglMakeCurrent(0, 0);
end;
procedure TFormGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(rc);
end;
end.
UnitMainForm.pas модулінің интерфейстік бөлігінен IDE Delphi-де үнсіздік бойынша
1.8.2 сурет. Windows.pas және OpenGL модулерінсіз
OpenGL-ді қолданған Delphi 6 жобасы.
1.9 Delphi.NET жобаларындағы OpenGL
Интернет жүйесінлегі көптеген форумдардың материалдарын жақсылап зерттесек,
RAD Studio 2009 жобасында Opengl-ді қолданатын қарапайым
1.9.1 сурет. Delphi For Net
Қосымшаның негізгі формасы System.Object класының кез-келген обьекті ретінде Net.Framework
Project1.dpr жобасын қатты дискке сақтағанна кейін, OpenTK.dll файылының
1.9.2 сурет Add Referece
1.9.3 сурет. Жиынтықтың жобаға қосылуы.
Басты форма Unit1-дің Uses секциясын бірнеше атаулар өрісімен толтырамыз:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
{ .NET Windows Forms }
System.Windows.Forms,
{ .NET Open ToolKit }
OpenTK,
OpenTK.Graphics;
Кодтан IDE ортасымен үнсіз келісім бойынша қойылған түсініктемелерді алып
var
Form1: TForm1;
NetForm: System.Windows.Forms.Form;
MyGLControl: OpenTK.GLControl;
Модульдің implementation секциясы оқиғаларды өңдеудің екі әдісінен ғана –
Модульдің соңғы коды төменде келтірілген:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
{ .NET Windows Forms }
System.Windows.Forms,
{ .NET Open ToolKit }
OpenTK,
OpenTK.Graphics;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
var
Form1: TForm1;
NetForm: System.Windows.Forms.Form;
MyGLControl: OpenTK.GLControl;
implementation
{$R *.nfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
NetForm := System.Windows.Forms.Form.Create;
NetForm.Show;
{ create OpenGL Control }
MyGLControl := OpenTK.GLControl.Create;
MyGLControl.Parent := NetForm;
MyGLControl.Dock := DockStyle.Fill;
MyGLControl.MakeCurrent;
{ draw }
OpenTK.Graphics.GL.Viewport(0, 0, MyGLControl.Width, MyGLControl.Height);
OpenTK.Graphics.GL.DrawBuffer(DrawBufferMode.Back);
OpenTK.Graphics.GL.Clear(OpenTK.Graphics.ClearBufferMask.ColorBufferBit);
OpenTK.Graphics.GL.Color3([1.0, 0.0, 0.0]);
OpenTK.Graphics.GL.Begin(OpenTK.Graphics.BeginMode.Lines);
OpenTK.Graphics.GL.Vertex2([-1.0, -1.0]);
OpenTK.Graphics.GL.Vertex2([1.0, 1.0]);
OpenTK.Graphics.GL.End;
MyGLControl.SwapBuffers;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{ destroy current OpenGL Context }
MyGLControl.DestroyContext;
end;
end.
NetForm формасы қосымшаның негізгі формасы Form1-ден кейін құралады. Одан
1.9.4 сурет Open GL-ді Delphi for
Open GL-ді қолданатын басқару элементтернің жұмысын дұрыс ұйымдастыру үшін
Қорыта келе бастауыш бағдарламалаушыға қажет болатын кейбюір пайдалы ақпараттарды
Олардың негізгілері:
SOURCE FORGENET қоры -Open GL-мен жұмыс жасауға арналған көптеген
CSGL Net.Framework-та Open GL мен жұмыс жасауға арналған тегін
GLScene - Open GL-дің негізгі төменгі деңгейдегі функцияларын ғана
TAO Framework - Net.Framework арналған Open GL-ге ұқсас құралдардан
2 ТАРАУ OPENGL-ДІҢ НЕГІЗГІ ҚАСИЕТТЕРІ
2.1 Хабарлар, аударымдар, жағдайлар
Бұл тарауда Windows – қосымшасы шынында қалай жұмыс атқаратыны
Кітаптың барлық кейінгі материалдары осы тараудың мазмұнына негізделеді, сондықтан
«Жағдай» - түсінігімен Delphi-мен жұмыс атқаратын әрбір бағдарламашы таныс.
Көбінесе бұл операциялық жүйенің және басқа термин, хабарлама деп
Delphi жобасындағы жазылған код On Creare жағдайдың өңдеушісі ретінде
Мұндай жағдайлар – операциялық жүйенің хабарламалар аналогтары – мнемоникті,
Операциялық жүйе терезенің олармен диалогы құрылуы үшін оларды ажырата
Терезе ссылкасы операциялық жүйеде ғана қолданбайды, сонымен қатар манипуляция
Оңай мысалда терезеде ссылка мағынасын құрастырып көрейік.
Delphi-дің ең аз қосымшасын алыңыз және жаңа жоба бастаңыз.
Procedure TFrom 27 Button 1 Click (Sender : TObiekt);
Var H : HWND;
Begin
И:=Find Window (TFrom 1», «TFrom 1»);
І 1 Н <> O then Show Message (
Else Show Message (Нет «TFrom 1»)
end;
Енді кнопканы басқан кезінде класс терезесі ашық болғаны туралы
Бұл жерде біз HWND – тип көлемін қайтаратын Findwindow
Сонымен, терезедегі ссылка бір мағынада терезені анықтайды. Hand қасиеттері:
Кейбір қорытындыларды мұқият қарастырайық. Класс терезе ең аз қосымша
Сонымен қандай да бір қосымшаны таратқыңыз келсе, Delphi-де
Терезеде ссылка болып, операциялық жүйе онымен хабарлама жіберу арқылы
Терезенің фокусы болмаса да, хабарлама алып және оларға әсер
On Mouse Move жағдайының өңдеуші формаларын келесі түрге келтіріңіз:
Procedure TFrom 2 From Mouse Move (Sender : TObject;
begin
Caption : =*+*+ IntTeStr {x; *x=*, *y* + IntTostr
end;
Тышқан батырмасының қозғалысы кезінде форма тақырыбында оның координаттары шығады.
Бағдарламаның екі нұсқасын жіберіп және фокусы жоқ терезе, өзінің
Терезе ссылка болғанда, қосымша онымен бірге кез келген оған
Кнопка щелчка өңдғуші кодын өзгертейік (жоба Ех03 каталогынан):
procedure TFrom 2. Button 1Click (Sender: Tobject) ;
Var
H : HWND;
begin
H: = Find Window («TForm 1», «Form 1»,)
I 1 H <> 0 then Send Message (H,
end;
Егер «TFrom 1» классты терезе «TFrom 1» тақырыбына ие
Бір уақытта бірнеше «TFrom 1» класс терезесін тіркеуге болады.
procedure TFrom 2. Button 1Click (Sender: Tobject) ;
Var
H : HWND;
begin
Repeat
H: = Find Window («TForm 1», «Form 1»,)
I 1 H <> 0 then Send Message (H,
Until H=O;
end;
Осындай мәселелерді шешу үшін Ws 32 утилит Delphi-де 0ойыл5аны
Мысалы осы утилит көмегімен Delphi арасындағы басты терезенің класс
Келесі жаттығу ретінде Ех06 каталогында орналасқан жобаны қарастырыңыз, онда
Терезені минимизирлеу үшін оған WM_SYS COMMAND хабарламасы жіберіледі, тұтынушы
АРІ фунуциясымен жұмыс Windows хабарлама - тақырыптары едәуір
Тарауды қорытындылауда ссылкалар Delphi версиясына тәуелділігінен integer немесе Lcngword
2.2 Неліктен Delphi қосымшасында үлкен өлшем болады
Бұл сұрақта қосымшаларды салыстыру кезінде бастаушы бағдарламашылар көбінесе қояды,
Пакеттерді қолдану масштабты жобалар үшін мәселелерді шешеді, бірақ қосымшаның
Тараудың тақырыбында қойылған сұраққа қысқаша жауап, компилирленген қосымшаның үлкен
Дегенмен орташа деңгейдегі қосымша қолданбайды және осы күшті мүмкіндіктерге
Дегенмен компилирленген модуль өзіне Delphi-ге қасиеттермен манипуляция жүргізетін кодты
Бұл жерде компилиятор Delphi кодты өте жақсы оптимизирлегендігінде емес,
Осы фактіні түсінгеннен кейін көбінесе бастаушы бағдарламашылар, RTTI
Өкінішке орай, оны жасау мүмкін емес. Мәселе тек Delphi
2.3 Delphi- де VCL-сіз программалау
Windows операциялық жүйесінің хабарлама және тарезеге ссылка негізгі терминдеріне
Біріншіден графиканы белсенді қолданушы қосымша көбнесе Delphi класы библиотека
Үшіншіден, қолдануларда түсіну үшін іске асырудың жылдамдығын үлкейту үшін
Төртіншіден, бұл әрекеттерде түсіну қажет ол Open CL
Ең аз Windows – бағдарлама. Ех 07 каталогынан Windows
Ең маңыздысы бұл бағдарлама дыбыстық сигнал болады.
Дегенмен Ех07 каталогындағы жоба кодына қайта оралайық. Ең бірінші
Берілген бағдарлама біз үшін себебі ол кейбір басқа мысалдар
Бағдарламаны шартты түрде екі бөлікке бөлуге болады – терезе
Терезе функциясында Windows хабарламасына қосымша реакция беріледі. Дәл терезе
Ең аз бағдарламада wm – Distrоу ең маңызды хабарламаға
Негізінде wm – Distori хабарламасын өңдеуге және өшіріп тастауға
Бастапқы бағдарлама терезе атрибуттарын анықтаудан басталады. Delphi-ге С
Терезе класс өрісін толтырғаннан соң операциялық жүиеге тіркелу міндетті.
Мысалы мен нәтижеде Reyister Class функциясымен қайтуды қорытындылаймын.
Терезені құрып болған соң біз қосымша қасиеттерді жасаймыз тақырып,
Терезені құрып болған соң - Snow Window шақырылған функцияны
API функция және хабарлама – бұл өте кең таралған
Өкінішке орай Delphi 3 және 4 версиялары жүйелік көмегімен
Не болмаса анықтама жүйесін өзінше құруға болады, ол үшін
Ескерту.
Delphi 5 версияда көмек жүйесі едәуір қанағаттанарлық орналасатын, ал
Ең аз бағдарлама кодын мен жеткілікті түсіндірдім, енді, сіздердің
Ескерту . Сонымен Windows қосымшаларында негізінен бақылау үнемі хабарлама
Келтірілген мысал тек біздің Delphi-дегі жағдай ориентирленген бағдарламалауды жобада
Мұндай өлшем оңай емес, ал кейде Delphi-ден басқа кез
Ал қазір Ех08 каталогынан алынған жобаны көресіз, онда терезе
Осындай кеңейтілген код әдетте жаңадан келгендерді айналдырады. Сондықтан мен
Open GL типтері (түрлері)
Open GL кітапханасы платформаларға, операциялық жүйелерге және бағдарламалау орталарына
Мұндағы осы тәуелсіздікті қамтамасыз ету үшін өзіндік типтер анықталған.
Әрбір бағдарламалау ортасындағы тақырыптық файлдарда бұл типтер сол ортаның
type
HGLRC = THandle;
одан кейін Open GL-дегі қалған барлық типтерді сипаттау басталалды,
GLfloat = SinGLe;
Бастапқыда (Delphi-нің) көпшілік Delphi-дің «өзіндік емес» типтерін қолданғанда қиналады.
GL_FALSE = 0, GL_TRDE = 1,
Бұл тұрақтылар GLGoolean типіне қатысты, бірақ олардың мәндері Bytebool
GLboolean = 0 1,
Осы сипаттау кейін графикалық кітапхананың стандарты кодынан алшақтаудың қажеті
TGLArrayf4 = array [0 ..3] of GLFloat,
TGLArrayf3 = array [0..2] of GLFloat,
TGLArrayf4 = array [0..3] of GLint,
Бұл кодтау қолайлылығымен кодтың жеңіл ауысуын арттыру мақсатында жасалған,
PGLfloat = ^GLFloat,
Мұндай типтер OpenGL-дің стандартты типтерінің жиынтығында болмайды. Кітапхана бастауы
Tcolor типі және OpenGL түс (түстер). Біздің алғашқы бағдарламаны
Диалогпен қайтарылатын түс Tcolor Dialog класы компонентінің color қасиетінде
procedure TfrmGL. ColorToGL (с: TColor; var R, G, В:
begin
R: = {c mod $100) / 255;
G: = ((c div $100) mod $100) / 255;
В: = (с div $10000) / 255; end;
Қажетті байттар аргументтен қиып алынады және [0:1] аралығында масштабталады.
ескерту: Дәл осы әрекеттерді басқа «дамытылған» әдіспен орындауға да
R =(cand$FF)/255;
G. = ((c and $FFOO) shr 8) / 255,
В: = ((c and $FFOOOO) shr 16) / 255
Бұл процедура батырманы басу өңдеушісінде қолданылады;
If ColorDialoGL. Execute then begin
ColorToGL (ColorDialoGL. Color, R, G, В);
Refresh;
end;
Мысалда терезе Delphi-дегі қарапайым әдісін – форманың Refresh әдісін
OpenGL.pas тақырыптық файлы туралы толығырақ. Delphі-дің үшінші және одан
procedure GLClearColor (red, green, blue, alpha: GLclampf); stdcall;
Модульдің implementation секциясында процедура төмендегідей сипатталады;
procedure GLClearColor; external openGL32;
Бұл модульде барлық процедуралар мен функцияларға көрстеілген Stdcall қызметтік
openGL32 = 'openGL32. dll1
екінші қолданылатын кітапханаға сәйкес келетін тұрақты OpenGL модульінің құрамында
pas:
const
GLu32 = 'GLu32. dll';
OpenGL модульінің оның инициализациясына сәйкес келетін маңызды бөлігі бір
Set8087CW($133F);
Осы процедураның анықтамасынан оп жылжымалы нүктемен операция (амалдар) лар
Келесі мүмкін бол жағдай, бұл – Microsoft фирмасы жасап
OpenGL-дің құралдарымен Delphі компоненттерін шығару
Теориялық тұрғыдан OpenGL функцияларының көмегімен тек форманың бетіне ғана
dc: = GetDC (Panel1. Handle);
SetDCPixelFormat(dc);
hrc: = wglCreateContext(dc);
Handle қасиетіне ие кез келген компонент бетіне (шығаруды осы)
dс:= image carwas Handle жазуымызға және begin paint пен
Терезенің стильдері мен OpenGL-дің шығаруы. Ех25 ішкі катологындағы OpenGL-дің
2.5.1-сурет OpenGL командаларымен шығаруға арналаған көптеген терезелерге ие болуы
Ех26 ішкі катологтағы жоба алдыңғысынан Sdi –қосымшаның пайда болуымен
2.5.2-сурет OpenGL-дің командаларымен шығару үшін қосымшалардың кез келген интерфейсін
Осы мысаладардан қосымша бірнеше орындау контекстінен құралуы мүмкін екені
Бірақ әрбір терезе тек бірғана орындау контекстіне ие болуы
Ех27 ішкі катологтағы мысалдағы boldelstyle форма терезесінің ks non-ға
Толықэкранды қосымшалар. Экранның барлық ауданын алу сізге (өз жобаңыздың
Алдымен, кейбір графикалық акселераторлар тек қана толықэкранды режимде және
windowState: = wsMaximized; қатармен толықтырылды.
Енді барлығы керемет жұмыс істеп тұр, терезе шамамен бүкіл
Енді экранның өлшемін бағдарламаның көмегімен, яғни қайта жүктеусіз ауыстыруды
Low Res Modes массивін мүмкін болған режимдерді есептеумен толтырамыз,
2.6 OpenGL-дің матрицалары
SL Rotatef және geTranscatef командаларының әрекеті сызықтық алгебратұрғысынан түсіндіріледі,
Көптеген командалар негізінде математиканың геометриялық амалдарымен, мысалы потенциясы сияқты
rat . Array [0. 3, 0. 3] of GLfloat,
Ауыстыру (тасымалдау, көшіру) матрицасы, бірге тең болуы қажет бас
mt [0, 0] := 1;
№ [1, 1] := 1;
№ [2, 2] := 1;
mt [3, 3] := 1;
mt [3, 2] := -8;
Бастапқы қозғалыс:
glMultMatrixf (@mt); түрінде жүзеге асырылады. Бастапқы орынға оралу қажет
glLoadMatrixf (@mt);
Матрицалық амалдармен танысып балғаннан кейін ағымдағы матрицаны етекте сақтап
Ех16-інші католгата бізде матрицаның түрін анықтауға көмектесетін жоба орналасқан
var
wrk: GLUInt; begin
glGetIntegerv (GL_MATRIX_MODE, @wrk);
case wrk of
GL_MODELVIEW: Caption: = 'GL_MODELVIEW';
GL_PROJECTION: Caption: = 'GL_PROJECTION';
end;
жобыны іске қосу арқылы, Open GL-де үнсіз келісім бойынша
2.6.1-Модел матрицасының құрамын шығару.
Терезе алғаш пайда болғанда, бұл матрица басты диогналы бірге
Ескерту. Бізге диогнал элементтерінң бірінші немесе екіншісінің нолдік мәні
Алдында келтірілген мысалдардағы ждобалардың барлығы қарапайым кеңістікті құрылыстарға сай
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode (GL_PROJECTION);
glLoadldentity;
glFrustum (-1, I, -I, I, 3, 10);
glMatrixMode (GL_MODELVIEW);
glLoadldentity;
Ескерту. Қарапайым мысалдарда біз(не өзгергенін) ешнәрсені байқамаймыз және не
Басқару пернелерімен курсор арқылы нүктені қозғалтуға болады, “W” пернесін
Дәлірек айтқанда, мысалда екі нүкте салынады – олардың екіншісі
glViewport(О, О, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadldentity;
gluOrtho2D(-ClientWidth/2,ClientWidth/2, -ClientHeight/2,ClientHeight/2);
glMatrixMode(GL_MODELVIEW);
glLo adldentity;
Енді, терезенің көлемі өзгергенде, сурет масштабталмайды, бұл жағдайда кеңістіктің
glBegin(GL_POINTS);
glVertex3fv (@point);
glEnd;
Ех19 ішкі ішкі каталогының келесі мысалын да компьютердің жалдамыдығын
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluOrtho2D (-175, 175, -175, 175);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
Соныдықтан, терезенің өлшемі өзгергенде, сурет барлық сахна әрқашан экранға
Осы үш параметрлерді басқару арқылы төмендегі суретте келтірілген суретке
2.6.2-Осындай өрнектерді алу шынымен өте оңай.
Осы мысалмен жұмыс жасағанда, сіз тегістелген кесінділер үшін ені
Сонымен, қатар, бұл мысалда кесінділер жүйесі қарай сызылатынын түсінуде
glLineWidth(size); // кесіндінің ені
If model // кесінділердің штрихталуын беретін режим
then glEnable(GL_LINE_STIPPLE) // штрихтеудің қолдану
else glDisable(GL_LINE_STIPPLE); // штрихтеудің қолданбау
If mode2 // кесінділердің тестілеуін беретін режим
then glEnable (GL_LINE_SMOOTH) // кесінділерді тегістеу
else glDisable(GL_LINE_SMOOTH); // тегістеуді қолданбау
glPushMatrix; // координаталар жүйесін есте сақтаймыз
For i: = 0 to 71 do begin //
glRotatef(5. 0, 0, 0, 1); // 5 градусқа бұру
glColor3f(1. 0, 1. 0, 0. 0); // кесінділердің түсі-сары
glBegin(GL_LINE_STRIP); // примитив - кесінді
glVertex3fv(@pntA); // кесінді басына көрсеткіш
glVertex3fv(@pntB); / кесінді соңына көрсеткіш
glEnd;
glColor3f(0. 0, 1. 0, 0. 0); // нүктелер түсі
glBegin(GL_POINTS); // дөрекі - нүкте
glVertex3fv(@pntA); // кесінді басындағы нүкте
glVertex3fv(@pntB); // кесінді соңында нүкте
glEnd;
end;
glPopMatrix; // бастапқы кординаталар жүйесіне ораламыз.
Қорытынды
Қорытындылай келе көп жылдар бойы Open GL компьютерлік графика
Сондықтан жұмыстың нақты мақсаты Delphi.Net жобаларында Open GL графикалық
OpenGL (Open Graphics Library) ашық графикалық стандарт, яғни
Ақпараттық технологиялардың даму прогресі, жаңа графикалық бағдарламалардың пайда болуына
Пайдаланылған әдебиеттер
1. Краснов. Delphi жобаларындағы графика;
2. Компьютерлік графика мен Open GL стандарты;
3. Жасаушының оқу-құралы.
4. http://www.compdoc.ru/Компьютерная документация от А до Я - Видео
5. Второе издание. Интерактивная компьютерная графика. Вводный курс на
6. PHP // Википедия - свободная энциклопедия. Страница «PHP».
http://ru.wikipedia.org/wiki/PHP
7. Бенкен Е.С. PHP, MySQL, XML: программирование для Интернета.
8. Харрис Э. PHP/MySQL для начинающих. - С. Пб.:Издательство
9. Конверс Т.А. PHP 5 и MySQL. Разработка и
10. MySQL // Википедия - свободная энциклопедия. Страница «MySQL».
http://ru.wikipedia.org/wiki/MySQL
11. Введение в MySQL // Русское сообщество разработчиков MySQL.
http://www.mysql.ru/docs/ilyin/
12. CMS // Википедия - свободная энциклопедия. Страница «Системы
http://ru.wikipedia.org/wiki/Системы_управлния_содержимым
12 Учебник по CMF/CMS Drupal // Веб-сайт Drupal BZ.
http://www.drupal.bz/bz_drupal_handbook
13. Joomla! // Википедия - свободная энциклопедия. Страница «Joomla!».
http://ru.wikipedia.org/wiki/Joomla
14. Хаген Г.Ф. Создание веб-сайтов с помощью Joomla! 1.5
15. Рамел Д.А. Joomla! / Пер. с англ. -
16. Единый указатель ресурсов // Википедия - свободная энциклопедия.
http://ru.wikipedia.org/wiki/URL
17. Веб-сервер Apache // Википедия - свободная энциклопедия. Страница
http://ru.wikipedia.org/wiki/Apache
18. Веб-сервер IIS // Википедия - свободная энциклопедия. Страница
http://ru.wikipedia.org/wiki/IIS
19. Трехуровневая архитектура // Википедия - свободная энциклопедия. Страница
http://ru.wikipedia.org/wiki/Трехуровневая_архитектура
20. Лобковская О.З., Шабанова Н.Ю. Методические указания для специальности
21. Рельзультаты ежеквартального опроса профессиональных участников рынка веб-разработок //
http://research.cmsmagazine.ru/
22. Определение категорий В1_В4 помещений (извлечения из НПБ 105-03
23. СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам
4





17 қыркүйек 2019ж.
2008-2018 topreferat.com - Қазақша рефераттар, курстық, дипломдық жұмыстар

^