«3D графиканы программалау»


Үшөлшемді дыбыс және дербес компьютерлер



бет5/7
Дата04.03.2016
өлшемі2.31 Mb.
#41158
1   2   3   4   5   6   7

Үшөлшемді дыбыс және дербес компьютерлер


Қазіргі уақытта түрлі фирмалар сигналдарды өндеудің жеткілікті көп процессорларын (DSP) шағарады, бұл адамның есту аппаратын сапалы үлгілеу үшін қажет болатын бифондық процессорлар мен сандық фильтларды нақты уақытта іске асыруға мүмкіндік беретін салыстырмалы түрде қымбат емес дыбыстық карталарды жасауға мүмкіндік береді. Сонымен, 3-өлшемді дыбыс экзотикадан кез келген орташа бағалық диапазондағы қазіргі замандағы дыбыс картасының стандартты функциясына айналады. Сандық имитациялық фильтрларға қосымша осындай дыбыс карталары Доплер әсерін (қолғалатын көз дыбысы биіктігінің ығысуы) іске асыруға мүмкіндік береді, ол компьютерлік ойындарға одан да үлкен шынайылық береді. DSP бар кейбір дыбыс карталарында (www.sblive.com) дыбыстық әсерлер, ревербераторлар және фильтрлардың көп жиынтығы болады, олар кейде компакт дискілердің дыбысын әлде қайда маңызды арттырады. Үйдегі компьютерлік дыбыс жазуға әуесқойлар 3-өлшемді дыбыспен әртүрлі эксперемент жасай алады. Дыбысты файлдарды редакциялаудың барлық көпшілік бағдарламалары үшін көлемді дыбыс беретін шығармаларды жасауды қолдайтын plug-ins болады.

3D ҚОСЫМШАНЫ ӘЗІРЛЕУ

Міндеттер қою


ОС Windows үшін қосымша әзірлеу, ол:

  • Қазіргі заманғы компьютерлердің нақты кезеңде үшөлшемді сахна құру жөніндегі мүмкіндіктерін көрсетеді.

  • 3D дыбыс технологиясын, яғни 2.0 немесе 5.1 колонкалар конфигурациясын пайдаланып, тыңдаушының айналасында дыбыстың виртуалды көзін жасауды көрсетеді.

  • 3D сахнамен интерактивті түрде өзара іс-қимыл жасауға мүмкіндік береді.

  • Қазіргі заманғы IBM PC-дің ең кең тараған аппараттық қамтамасыз етуде жұмыс істеуге тиіс, яғни мамандандырылған бейне немесе дыбыстық адаптерлерді талап етпейге тиіс.



Орындаудың мүмкін жолдарына шолу және олардың ішінен ұтымдыны таңдау

Не таңдаймыз?


Мен API-ді таңдаймын, оны пайдаланып мен 3D қосымшаны жазамын. Себебі ереже бойынша бағдарлама ең кең тараған аппараттық қамтамасыз етуде жұмыс істеуге тиіс, яғни R-Redline, S3D Toolkit, Glide сияқты мамандандырылған API-лер оларға қатысты емес. Мен ең кең тараған екі API: Direct3D пен OpenGL арасында таңдау жасаймын.

Салыстырылатын өлшемдер


  1. Қолданылатын операциялық жүйелер мен бағдарламалау тілдері

  2. Құрылатын бағдарламалардың өнімділігі

  3. Сәулеті мен кеңейтілуі

  4. Функционалдығы

  5. Пайдалану ыңғайлылығы. Бағдарлама кодының көлемі мен оқылуы


Бақылау сұрақтары:

  1. Компьютерлік анимация

  2. 3D Studio MAX қандай бағдарлама?

  3. 3D композицияны құрудың жалпы принциптері


Дәріс 6

Тақырыбы: Direct3D мен OpenGL салыстыру. Қолданылатын операциялық жүйелер мен бағдарламалау тілдері. Құрылатын бағдарламалардың өнімділігі.

Direct3D менOpenGL салыстыру

Мақсаты: Direct3D мен OpenGL түсінігімен танысу
Қысқаша конспект

  1. Қолданылатын операциялық жүйелер мен бағдарламалау тілдері

DirectXWindows тобының ОС-де ғана жұмыс істейді. Кітапхананың соңғы 10-нұсқасы Windows Vista-мен ғана жұмыс істейді және ОС-тың ескілеу нұсқаларын қолдамайды. Microsoft болашақта DirectX-ті басқа платформаларға ауыстыруды жоспарламайды. DirectX-ті пайдаланатын қосымшаларды Microsoft Visual Studio-да ғана әзірлеуге болады. Бірақ DirectX-пее Delphi-де жұмыс істеу үшін тақырыптық файлдар – JEDI бейресми жоба бар.

OpenGL-дің бастапқы кодтары ашық болғандықтан, түрлі ОС-тар мен бағдарламалау тілдерінде осы кітапхананың порттары мен оларды сатудың көптеген жолдары бар.

OpenGL жұмыс істейтін ОС-тар: Windows, Linux, MacOS, Silicon Graphics Workstations, BeOS.

OpenGL арқылы жазуға боладтын тілдер: ADA, Fortran, Haskell, Java, Perl, Pike, Python, Ruby, Visual C++, Visual Basic.



  1. Құрылатын бағдарламалардың өнімділігі

Құрылатын бағдарламалардың өнімділігін тестілеудің мағынасы жоқ. Екі кітапхана үшін де нәтижелер бірдей болады, себебі қазіргі уақытта барлық функциялар тікелей аппараттық жеделдетушілер арқылы іске асырылады. Нәтижелердің шамалы айырмашылықтары өлшейлердің қателіктеріне байланысты ғана болуы мүмкін; мұнда мен тестіленетін кодты оңтайландыруды және нақты драйверлердің ерекшеліктерін жатқызамын, бірақ GL мен DX-те кодты орындау үшін жалпы бейне карта сол бір әрекеттерді істеуге тиіс, яғни жылдам істеуі туралы даулардың негізі жоқ.

  1. Сәулеті мен кеңейтілуі

OpenGL-дің негізгі ерекшелігі – қарапайымдылық. OpenGL-нің өзегі примитивтерді (яғни үшбұрыштарды) өндеу процесін бақылайды. Деректерді беру үшін рәсімдік модель пайдаланылады, іс жүзінде – функцияларды шақыру. Уақыттың әрбір сәтінде OpenGL-дің жағдайы өндеу өлшемдерін белгілейтін ауыспалы жиынтықтары (мысалы, текстураны салу немесе салмау) арқылы белгіленеді. Әрбір жаңадан берілген үшбұрыш ағымдағы жағдайына байланысты өндеуден өтеді. Осындай механизм өте тиімді болады, ал код, әдетте, қысқа және қарапайым болады. OpenGL өзегі рәсімдік болғанымен, OpenGL-ді объекттік-бағытталған технологиялармен бірге пайдаланғанда, әдетте, қиындық туындамайды: барлығы бағдарламашының таңдауына байланысты болады.

DirectX COM (Component Object Model) моделіне негізделген. Мұндай сәулеттің артықшылықтары да, кемшіліктері де болады. Атап айтқанда, DirectX шақырулары пайдаланылатын код, әдетте, жеңіл оқылып, түсінікті болатын идеал емес. Сондықтан да қарапайым үшбұрыштың суретін салудың өзі кодтың үлкен көлемін талап етеді. Microsoft-ты әзірлеушілер бұны түсінеді, сондықтан бағдарламалауды жеңілдету үшін олар жеке DirectX Common Files кітапхаансын жасады, ол негізінен пайдаланатын кодты жасырады.

OpenGL-де кеңейту механизмі бар, оны базалық спецификацияға кірмейтін, нақты бейне картаға арналған OpenGL-ді сатуды ғана қолдайтын түрлі функцияларды пайдалануға болады.

Бұл процесс былай көрінеді: өндіруші белгіленген пайдалы функцияны қолдайтын бейне картаны шығарысымен, оны өзінің OpenGL-ді (ол,әдетте, драйверді жеткізуге қосылады) сатуына қосады. Егер бағдарламашы осы кеңейтуді арнайы сұратса, ол бағдарламашы үшін қол жетімді болады. Әрине, мұндай жол әмбебап емес: басқа бейне картада интерфейстегі өзгешіліктерге байланысты оны істеу мүмкін болмайды. Сондықтан да ARB мақұлдаған кеңейтулер болады, - оларды пайдалану кезінде олар түрлі өндірушілердің бейне карталарында жұмыс істейді деп үміттенуге болады. Осындай кеңейтулер OpenGL-дің келесі нұсқаларына енгізуіне кандидаттар болып табылады.

Бұл механизм ыңғайлы емес болып көрінеді (және іс жүзінде сондай). DirectX-те барлығы жеңіл: функционалдық кітапхананың осы нұсқасымен қолданады немесе қолданбайды. Егер қолданбаса – үміттеніп, келесі нұсқасын күту керек. Бірақ аппараттық функциялардың DirectX нұсқасына қосылмауына байланысты пайдаланылмауы жағдайлары өте сирек кездеседі. Жоғарыда айтылғандай, Microsoft ойын (және тек ол ғана емес) "темірді" өндірушілермен тығыз жұмыс істейді. Екінші жағынан DirectX нұсқасын шамамен бір жыл күту керек, ал осы уақытта жаңға функциялар OpenGL-ді кеңейту арқылы қол жетімді болып жатады.

Сонымен, OpenGL мен DirectX аппараттық функцияларды қолдау жөніндегі мүмкіндіктері, жалпы, бірдей. OpenGL-дың жаңа функциялары кеңейту механизмі арқылы қол жетімді болады, ал DirectX-те олар тек жаңа нұсқаларында ғана пайда болады.



OpenGL-дің үлкен артықшылығы, ең алдымен, оның "ашық стандарт" болып таыблатындығында. Аппараттық платформасы бар кез келген компания SGI-ден лицензияны сатып алып, одан өзінің OpenGL іске асуын жасай алады. OpenGL-дегі өзгерістерді түрлі компаниялардың өкілдері ұсынады, талқылайды және бекітеді. DirectX-ке қатысты айтатын болсақ, мұндағы жағдай мүлдем қарама-қарсы. Тек Microsoft қанакітапханаға өзгерістер енгізе алады. Басқаша айтсақ, соңында нақты Microsoft-тің өзі кітапхананы дамытудың барлық жолдарын белгілейді және, егер жол дұрыс таңдалмаған болса, бұл тек жаңа нұсқада ғана түзетілуі мүмкін.

  1. Функционалдығы

ОpenGL де, Direct3D де өзінің жұмысында 3D конвейер схемасын пайдаланады. Олар арасында негізгі айырмашылық примитивтердің конвейер ішіндегі көріну тәсілінде болып тұр. 1-кестеде кітапханалардағы функциялардың болуы салыстырылады. Екі кітапхананың да мүмкіндіктері өте көп болғандықтан, кестеде олар арасында айырмашылығы бар мүмкіндіктер ғана көрсетіледі.

1-кесте. OpenGL 1.2, Direct3D 7 және 8-дегі API функцияларды салыстыру

Функциялар

OpenGL 1.2 Core

Direct3D 7

Direct3D 8

Жүйе

Операциялық жүйелерді қолдау


Windows (9x, NT, 2000), MacOS, BeOS, *nix, others

Windows (9x, 2000, CE)

Windows (9x, 2000, XP)

Әзірлеуші/ иесі

OpenGL ARB

Microsoft

Microsoft

API спецификациясы

OpenGL Specification

SDK/DDK Docs, DDK Reference

SDK Documentation

APIмеханизмі

Кітапханалар және кеңейтулер

COM

COM

Бейне карта қолдамайтын технологияларды бағдарламалық эмуляциялау

+

-

-

Кеңейтулер механизмі

+

-

+

Бастапқы кодтардың қол жетімділігі

+

+

-

Модельдеу

Полигондар шыңдарын функционалдық интерполяциялау

-

+

+

Полигондар шыңдарын бағдарламалық интерполяциялау

-

-

+

Қисықтардың өлшемді примитивтері

+

-

+

Беттердің өлшемді примитивтері

+

-

+

Иерархиялар тізімдерін бейнелеу

+

-

-

Рендеринг

Екі жақты жарық

+

-

-

Нүкте рендерингінің атрибуттары

+

-

+

Сызық рендерингінің атрибуттары

+

-

-

Бағдарламаланатын пиксельды шейдерлер

-

-

+

Triadic Texture Blending Operations

-

-

+

Cube Environment Mapping

-

+

+

Көлемді текстуралар

+

-

+

Мультитекстурлы каскад

-

+

+

Текстуралардың уақытша тізілімі

-

-

+

Айналы текстураларды адрестеу

-

+

+

Texture "Wrapping"

-

+

+

Арақашықтыққа байланысты тұман

-

+

+

Рельефті текстурлеу

-

+

+

Текстураларды екі рет тегістеу

-

+

+

Текстураларды төрт рет тегістеу

-

+

+

Add Signed Texture Blend

-

+

+

Кадр буфері

Аппараттық тәуелді Z Buffer

+

-

-

Толықэкранды тегістеу

+

+

+

Қозғалысты шаю

+

-

+

Анық бейнеленген кеңістіктің тереңдігі

+

-

+

Жинақтаушы буфер

+

-

-

Әртүрлі

Picking Support

+

-

-

Көп мониторлы жүйелерді қолдау

-

+

+

Стерео рендеринг

+

+

-

Таза OpenGL 1.2 (кеңейтулерсіз) 8, әсіресе 9 және 10-нұсқадағы Direct3D-тен көп артта қалатынымен, OpenGL-дегі қазіргі заманғы бейне карталардың барлық функцияларын қосылатын бөгде кітапханалар арқылы пайдалануға болады.



  1. Пайдалану ыңғайлылығы. Бағдарлама кодының көлемі мен оқылуы

OpenGL мен Direct3D-дегі бағдарламалардың мәтіндерін салыстырамыз. Екі бағдарлама да сол бір әрекет жасайды, атап айтқанда бұрыштарының түсі әртүрлі сол бір үшбұрыштын суретін салады.

2-кесте. Әртүрлі кітапханаларға арналған қарапайым бағдарламаның бастапқы кодын салыстыру

OpenGL

Direct3D

Экранды тазалау:

glClear(GL_COLOR_BUFFER_BIT);


glBegin(GL_TRIANGLES);

glColor3d(1,0,0);

glVertex3d(1,2,3);

glColor3d(0,1,0);

glVertex3d(4,5,6);

glColor3d(0,0,1);

glVertex3d(7,8,9);

glEnd();


glVertex3d – біздің үшбұрыштың шыңдарын салатын функция, glColor3d кіруде RGB түсті компоненттерді және одан кейін жүретін барлық шыңдарды қабылдайды, және келесі glColor-ды шақыруға дейін, тиісті түсте болады.

Экранды тазалау:

d3d_Device->Clear (0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0, 0, 0), 0, 0);


D3D-де сурет салу алдында деректердің арнайы құрылымын дайындау қажет:
struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color;};

CUSTOMVERTEX g_Vertices[] =

{

{1, 2, 3, 1, 0xffff0000},



{4, 5, 6, 1, 0xff00ff00},

{7, 8, 9, 1, 0xff0000ff},

};

LPDIRECT3DVERTEXBUFFER8 p_VertexBuffer = NULL;


Бұл құрылым шың координаталарын ла, олардың түстерін де қамтиды
d3d_Device->CreateVertexBuffer (3*sizeof(CUSTOMVERTEX),

0, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &p_VertexBuffer);

VOID* pVertices;

p_VertexBuffer->Lock (0, sizeof(g_Vertices), (BYTE**)&pVertices, 0);

memcpy (pVertices, g_Vertices, sizeof(g_Vertices));

p_VertexBuffer->Unlock();


CreateVertexBuffer – құрылғыда үш шыңға орын белгілейді

Lock() –буферді бұғаттайды

memcpy() –буферді бейне карта буферәне көшіреді

Unlock() –буферді бұғаттаудан босатады


d3d_Device->BeginScene ();

d3d_Device->SetVertexShader (D3DFVF_CUSTOMVERTEX);

d3d_Device->SetStreamSource (0, p_VertexBuffer, sizeof(CUSTOMVERTEX));

d3d_Device->DrawPrimitive (D3DFVF_XYZRHW | D3DFVF_DIFFUSE, 0, 1);

d3d_Device->EndScene ();
SetVertexShader() шыңның түрін белгілейді.

SetStreamSource() бұдан әрі жұмыс істеу үшін ағымды белгілейді.

DrawPrimitive – экранда примитивтердің суретін салады

OpenGL коды бірнеше есе аз екені көрініп тұр, бірақ Direct3D төмендеу деңгейде жұмыс істеуге, яғни темірді дәлдеу басқаруға мүмкіндік береді.

DirectX объектілік-бағытталған бағдарламалауға және нақты СОМ-ға әуесқойлар үшін өте ыңғайлы болады. DirectX-де COM қолданыстағы кодты өзгертпей кітапханаға (жаңа нұсқаларында) өзгерістер енгізу үшін пайдаланылады. OpenGL-де мұндай функция жоқ, бірақ бұны үлкен кемшілік деуге болмайды.

DirectX-те қарапайым бағдарламаны жазу үшін қажет болатын код көлемі өте зор (200 ден 800 жолдар арасында болады). Microsoft осы көрсеткішті азайтуды белсенді түрде ізденуде, бірақ ол сонда да зор болып отыр. OpenGL-де бұнын бәрі өте қарапайым – тура осындай міндетті шешу үшін кодтың 50-ге жетпейтін жолдары қажет болады.





Достарыңызбен бөлісу:
1   2   3   4   5   6   7




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет