DirectX äëÿ íà÷èíàþùèõ
Àâòîð: Âèêòîð Êîäà
Ââåäåíèå
Ôàíàòû èãð ÷àñòî âñòðå÷àþòñÿ ñ àááðåâèàòóðîé "DirectX". Íà óïàêîâêàõ èãð äëÿ Windows 95 îíà ïîÿâèëàñü â êîíöå 1995 ãîäà ïðèìåðíî îäíîâðåìåííî ñ âûõîäîì ñàìîé îïåðàöèîííîé ñèñòåìû. Ñ òåõ ïîð êà÷åñòâî èãð ðåçêî óøëî ââåðõ, äîñòèãíóâ íåáûâàëûõ âûñîò. ×òî æå òàêîå DirectX? Ýòî íàáîð ñïåöèàëüíûõ API, êîòîðûå ïðåäîñòàâëÿþò ðàáîòàþùåé ïðîãðàììå ïðÿìîé äîñòóï ê àïïàðàòíîé ÷àñòè êîìïüþòåðà, îáåñïå÷èâàÿ íàèâûñøåå áûñòðîäåéñòâèå ïðè âûâîäå ãðàôèêè, çâóêà, ïîëó÷åíèÿ äàííûõ îò óñòðîéñòâ ââîäà è ò. ä. Ñðàçó íàäî ñêàçàòü, ÷òî áèáëèîòåêà ñîçäàâàëàñü èñêëþ÷èòåëüíî äëÿ èãð, ò. ê. èìåííî îíè òðåáóþò îò àïïàðàòíûõ ñðåäñòâ âñå 100% ïðîèçâîäèòåëüíîñòè. Ïîçäíåå, ñ âûõîäîì íîâûõ âåðñèé, DirectX íàø¸ë ïðèìåíåíèå è â ìóëüòèìåäèà-îáëàñòè.
Êîìïîíåíòû DirectX îáåñïå÷èâàþò íå òîëüêî ïðÿìîé äîñòóï ê óñòðîéñòâàì êîìïüþòåðà: îíè èçáàâëÿþò ïðîãðàììèñòà îò òÿæåëîãî òðóäà ïðîãðàììèðîâàíèÿ íà ÿçûêå Assembler, ðåøàþò ïðîáëåìó ñ äðàéâåðàìè óñòðîéñòâ, íåçàìåíèìû ïðè ñîçäàíèè òð¸õìåðíûõ è ñåòåâûõ èãð. Äî ïîÿâëåíèÿ DirectX õîðîøèõ ñåòåâûõ èãð áûëî íå òàê óæ ìíîãî ïî ïðè÷èíå òðóäíîñòè èõ ïðîãðàììèðîâàíèÿ.
Íà ñåãîäíÿøíèé äåíü ïîñëåäíÿÿ âåðñèÿ DirectX íîñèò ïîðÿäêîâûé íîìåð 8.1, ÷òî ïîçâîëÿåò çàäóìàòüñÿ, ñêîëüêî óòåêëî âðåìåíè. Áèáëèîòåêà ïîëíîñòüþ îáåñïå÷èâàåò ðàçðàáîò÷èêà âñåì íåîáõîäèìûì èíñòðóìåíòàðèåì äëÿ ðàçðàáîòêè êà÷åñòâåííûõ èãð, ïîääåðæèâàåò âñå ñîâðåìåííûå àïïàðàòíûå ñðåäñòâà è ñòàëà äå-ôàêòî ñòàíäàðòîì â èãðîâîé èíäóñòèðè èãð äëÿ ïåðñîíàëüíîãî êîìïüþòåðà IBM PC.
DirectX 8 ñîñòîèò èç ñëåäóþùèõ êîìïîíåíòîâ:
- Direct3D
- ñîäåðæèò âûñîêîóðîâíåâûé èíòåðôåéñ Retained Mode ïîçâîëÿþùèé ëåãêî âûâîäèòü 3-õìåðíûå ãðàôè÷åñêèå îáüåêòû, è íèçêîóðîâíåâûé èíòåðôåéñ Immediate Mode, ïðåäîñòàâëÿþùèé ïîëíûé êîíðîëü íàä ðåíäåðèíãîì.  âîñüìîé âåðñèè ðåàëèçîâàíà íîâàÿ òåõíîëîãèÿ âåðøèííûõ øåéäåðîâ, ïîçâîëÿþùàÿ ïîäíÿòü óðîâåíü ðåàëèñòè÷íîñòè èçîáðàæåíèÿ â íîâûõ èãðàõ. Ïî ñâîåé ôóíêöèîíàëüíîñòè âïëîòíóþ ïðèáëèæàåòñÿ ê OpenGL 1.2.
- DirectDraw
- ïðåäíàçíà÷åí äëÿ îòîáðàæåíèÿ äâóìåðíîé àíèìàöèè íà ýêðàíå ìîíèòîðà. Îáåñïå÷èâàåò ïðÿìîé äîñòóï ê âèäåîàäàïòåðó, çà ñ÷¸ò ÷åãî äîñòèãàåòñÿ áûñòðûé âûâîä ãðàôèêè, ïî ñêîðîñòè íà ïîðÿäîê ïðåâûøàþùèé GDI. Ýòè äâà êîìïîíåíòà â âîñüìîé âåðñèè îáúåäèíåíû â îäèí - DirectXGraphics. Îäíàêî, ëè÷íî ÿ íå ïî÷óâñòâîâàë ñêîëü-íèáóäü õàðàêòåðíûõ èçìåíåíèé (â DirectDraw API). Âñ¸ ýòî ñêîðåå ïîõîæå íà ìàðêåòèíãîâûé õîä.
- DirectSound
- ñîçäàí äëÿ ïðÿìîãî äîñòóïà ê àïïàðàòíîé ÷àñòè çâóêîâûõ ïëàò, ÷òîáû èçáàâèòü âîñïðîèçâåäåíèå çâóêà îò "òîðìîçîâ", êîòîðûå âîçíèêàþò ïðè ðàáîòå ñ Win32 API.
- DirectMusic
- ðàáîòàåò ñ ìóçûêàëüíûìè êîìàíäàìè, ïîñûëàåìûìè çâóêîâîé êàðòå. DirectMusic è DirectSound âîñüìîé âåðñèè îáúåäèíåíû â îäèí êîìïîíåíò - DirectXAudio.
- DirectInput
- ýòà êîìïîíåíòà îòâå÷àåò çà ëþáûå óñòðîéñòâà ââîäà, íàïðèìåð, àíàëîãîâûå èëè öèôðîâûå äæîéñòèêè, ðóëè è ïåäàëè, ðó÷êó óïðàâëåíèÿ ïîë¸òîì, ñâåòîâîé êàðàíäàø èëè Touch-Screen. Íåêîòîðûå âîçìîæíîñòè êîìïîíåíòû ìîæíî ðåàëèçîâàòü ñðåäñòâàìè Win32 API, ïîëó÷èâ òàêîé æå áûñòðûé äîñòóï, íî â íåêîòîðûõ îáëàñòÿõ DirectInput íåçàìåíèì (ïîääåðæèâàåò òåõíîëîãèþ force-feedback è íåñòàíäàðòíûå óñòðîéñòâà ââîäà).
- DirectPlay
- óïðîùàåò æèçíü ïðîãðàììèñòà, ðåøèâøåãîñÿ äîáàâèòü â ñâîåé ïðîãðàììå âîçìîæíîñòü ñîâìåñòíîé ðàáîòû (èãðû) ïî ñåòè èëè ïî ìîäåìó (ýòî íàâåðíÿêà õîðîøî çíàêîìî ëþáîìó ãåéìåðó).  âîñüìîé âåðñèè ýòà êîìïîíåíòà çíà÷èòåëüíî ïåðåðàáîòàíà è óëó÷øåíà.
- DirectSetup
- ïðåäíàçíà÷åí äëÿ óñòàíîâêè DirectX.
- DirectShow
- èñïîëüçóåòñÿ â ìóëüòèìåäèà-òåõíîëîãèÿõ - ìîæíî âûïîëíèòü âûñîêîêà÷åñòâåíîå âîñïðîèçâåäåíèå èëè çàõâàò âèäåî è çâóêà. Ðàñïðîñòðàí¸ííîñòü èñïîëüçîâàíèÿ êîìïîíåíòû íå ñëèøêîì âåëèêà
Âñå êîìïîíåíòû ðåàëèçîâàíû êàê âíóòðèïîöåññíûå ñåðâåðû, ò.å. ðàçìåùàþòñÿ â DLL. Àðõèòåêòóðà äîñòóïà áàçèðóåòñÿ íà òåõíîëîãèè COM. Çíà÷èò, äëÿ èñïîëüçîâàíèÿ DirectX íàì ïîíàäîáèòñÿ ñðåäà ïðîãðàììèðîâàíèÿ, ïîääåðæèâàþùàÿ îáðàùåíèå ê ôóíêöèÿì DLL èç ãîòîâûõ ïðîãðàìì è ïîääåðæêà COM. Delphi ëåãêî ðåàëèçóåò âñ¸ ýòî, à çíà÷èò, ìîæíî ñîçäàâàòü òàêèå æå êà÷åñòâåííûå ïðîãðàììû, êàê è â Visual C++: ïîíàäîáÿòñÿ òîëüêî ôàéëû çàãîëîâêîâ äëÿ DirectX 8.
Êàê ÿ èçó÷àë êîìïüþòåðíóþ ãðàôèêó
Êîãäà ÿ òîëüêî íà÷èíàë çàíèìàòüñÿ ãðàôèêîé â Delphi, ÿ ïðèìåíÿë âñÿêèå êîìïîíåíòû VCL âðîäå
TBitmap è TImage. Íàäî ñêàçàòü, äåëî øëî: ÿ ñàìîñòîÿòåëüíî ðàçîáðàëñÿ ñ ìåòîäàìè Canvas, äîãàäàëñÿ îá íåîáõîäèìîñòè áóôåðèçàöèè ïðè ãðàôè÷åñêîì âûâîäå, ñäåëàë ïîëíîýêðàííóþ èãðó (ïðàâäà, íåäîäåëàë äî êîíöà :-(( ). Ìåíÿ óäèâëÿëî òîëüêî òî, ÷òî ôèãóðêè äâèãàëèñü äîâîëüíî ïîðûâèñòî (ðàçðåøåíèå ñîñòàâëÿëî 800*600), è èçáàâèòüñÿ ÿ îò ýòîãî íå ìîã. Ïîñòåïåííî ÿ ïîíÿë, ÷òî ýòî íå æèçíü è íà÷àë èçó÷àòü GDI. ×åðåç íåêîòîðîå âðåìÿ ÿ ïîëíîñòüþ çàêèíóë TBitmap'û è ìîè ïðîãðàììû ðàáîòàëè èñêëþ÷èòåëüíî ÷åðåç ôóíêöèè GDI. Íî è çäåñü âûâîä áûë ñëèøêîì ìåäëåííåí è ïðèãîäåí ðàçâå ÷òî ïðè ðàçðåøåíèè 400*300 è ìåíåå. Òàêæå áîëüøîé ïðîáëåìîé áûëî îñóùåñòâëåíèå âûâîäà íåðåãóëÿðíûõ ñïðàéòîâ (êàðòèíîê ñ ïðîçðà÷íûìè îáëàñòÿìè), ò.ê. â GDI äëÿ ýòîãî íóæíî ïîäãîòîâèòü ìàñêó è ñàì ñïðàéò. Êàê íè ñòðàííî, âïåðâûå ñ DirectX (DirectDraw) ÿ ïîçíàêîìèëñÿ â êíèãå Ìèõàèëà Êðàñíîâà "OpenGL.Ãðàôèêà â ïðîåêòàõ Delphi". Íà äèñêåòå ñ êíèãîé ïîñòàâëÿëñÿ ïðèìåð äëÿ èçìåíåíèÿ ýêðàííîãî ðàçðåøåíèÿ ñ ïîìîùüþ DirectDraw è çàãîëîâî÷íûé ôàéë. Íà÷èíàë ÿ ñ òîãî, ÷òî ïðîñòî çàíîâî íàáèðàë èñõîäíûé òåêñò â ñâîèõ ïðîåêòàõ, "çàó÷èâàÿ" îñîáåííîñòè DirectDraw API. Òîãäà âñ¸ ýòî âûãëÿäåëî äîâîëüíî ñòðàííûì è íåïîíÿòíûì, äàæå QueryInterface() áûë ïîëíîé çàãàäêîé. Íà ñàìîì äåëå âñ¸ ñòàíîâèòñÿ äîñòàòî÷íî ïðîçðà÷íî, íî òîëüêî ïîñëå ïðàêòèêè ñîîòâåòñòâóþùåãî îáú¸ìà. DirectDraw ðåøèë ïðîáëåìû ìåäëåííîãî âûâîäà, à òàêæå ïîìîã ïðè âûâîäå ïðîçðà÷íûõ ñïðàéòîâ. Òåïåðü ìîè ïðîãðàììû ðàáîòàþò ìàêñèìàëüíî áûñòðî, à óðîâåíü ïðîãðàììèðîâàíèÿ äîñòèã "ïðîôåññèîíàëüíîãî", âåäü ÿ èñïîëüçóþ òå æå ñàìûå ñïîñîáû, ÷òî è ðàçðàáîò÷èêè ñåðü¸çíûõ èãðîâûõ ïðîãðàìì.
Êîãäà ÿ åù¸ íå èìåë äîñòóïà â Ñåòü, ðàáîòàòü ïðèøëîñü ñ çàãîëîâî÷íûìè ôàéëàìè îò Hiroyuki Hori äëÿ DirectX 6 - èõ ÿ äîñòàë íà CD-ROM. Íî òåïåðü ÿ èñïîëüçóþ DirectX 8. Âîîáùå, íàäî ïðèó÷èòü ñåáÿ äâèãàòüñÿ â íîãó ñî âðåìåíåì è èñïîëüçîâàòü íîâåéøèå òåõíîëîãèè, äàæå åñëè íå õî÷åòñÿ "ñëåçàòü" ñ íàñèæåííîé ñòàðîé. È õîòÿ íèêàêèõ ñêîðîñòíûõ ïðåèìóùåñòâ ïðè èñïîëüçîâàíèè ìåòîäîâ DirectDraw èç SDK 8 ïî ñðàâíåíèþ c SDK 5 èëè 6 óæå, íàâåðíîå, íå ïîëó÷èòü, ïðåäïîñûëîê ê èñïîëüçîâàíèþ ñòàðûõ âåðñèé íåò. Òåì áîëåå ÷òî Microsoft ñòðåìèòñÿ ñäåëàòü îòëè÷èÿ ìåæäó API ðàçíûõ âåðñèé ìèíèìàëüíûìè, à íîâåéøàÿ runtime-÷àñòü DirectX óñòàíîâëåíà óæå íàâåðíÿêà ó 99% èãðîìàíîâ.
Íà êîãî ðàññ÷èòàíû ïðèìåðû
Âñå ïðèìåðû ðàññ÷èòàíû íà íîâè÷êîâ. Äàæå åñëè âû ïåðåèãðàëè âî âñå ìûñëèìûå èãðû, îíè íå ñäåëàëè èç âàñ ãóðó â DirectX. Ìíå î÷åíü íå õîòåëîñü ïåðåãðóæàòü ïðîãðàììíûå ïðèìåðû íåîáÿçàòåëüíûìè ïîäðîáíîñòÿìè, ïîýòîìó âñå îíè (çà èñêëþ÷åíèåì Sound), ìàêñèìàëüíî óïðîùåíû. Ìíå õîðîøî èçâåñòíî, íàñêîëüêî òðóäíî ðàçáèðàòü ïðîãðàììû, íàïèñàííûå êåì-òî äðóãèì, åñëè îíè åù¸ è áîëüøèå ïî ðàçìåðó. Âñå âîçìîæíîñòè èãðîâîãî êîìïëåêñà íå èñïîëüçóþòñÿ, â ÷àñòíîñòè, íå ïîêàçàíî, êàê êîððåêòíî âûâîäèòü â DirectDraw ñïðàéòû, âûõîäÿùèå çà ãðàíèöû ýêðàíà, êàê ïëàâíî ãàñèòü ýêðàí è ò. ä. Âñ¸ ýòî òîëüêî óñëîæíÿåò ïðîãðàììó - ñóòü, ñåðäöå ìåõàíèçìà ðàáîòû êîìïîíåíòû òåðÿåòñÿ â äåáðÿõ êîäà, îáåñïå÷èâàþùåãî ïðèìåðó ëèøü êðàñî÷íîñòü.
Çäåñü âû íå íàéä¸òå ïðèìåðîâ äëÿ Direct3D è DirectMusic - ÿ åù¸ ñàì òîëüêî íà÷èíàþ èçó÷àòü òð¸õìåðíóþ ãðàôèêó (â îñíîâíîì ïîêà OpenGL), à ñ MIDI-çâóêàìè ñâÿçûâàòüñÿ îòêàçûâàþñü èç-çà ïðèìèòèâíîñòè òåõíîëîãèè. DirectPlay òîæå îñòàëñÿ áåç âíèìàíèÿ - ýòî íå ìîè èíòåðåñû.
Âñåãäà íà÷èíàéòå ðàññìîòðåíèå ïðîãðàììû ñ ñàìîãî íà÷àëà - ïðîöåäóðû FormCreate() ãëàâíîé ôîðìû, ýòî ïîìîæåò íà÷àòü èçó÷åíèå ñòðóêòóðû àëãîðèòìà.
ß íå ñòàâèë ñâîåé öåëüþ ïåðåïèñàòü ãëàâû êíèã ïî DirectX ïðè ñîñòàâëåíèè ñîïðîâîäèòåëüíûõ ëåêöèé - ïîýòîìó äàë òîëüêî ñàìûå îáùèå ðàçúÿñíåíèÿ, êîòîðûå, íàäåþñü, ïîìîãóò îòâåòèòü íà íåìûå âîïðîñû íîâè÷êîâ.
Ïðåäïîëàãàåòñÿ, ÷òî ÷èòàòåëü âëàäååò Delphi è óìååò ïðîãðàììèðîâàòü íà Object Pascal. Åñëè âû äî ñèõ ïîð ïðîãðàììèðîâàëè òîëüêî ñ èñïîëüçîâàíèåì VCL, ïåðåõîä íà API-ïîäîáíûé êîä ìîæåò îêàçàòüñÿ áîëåçíåííûì - çàáóäüòå ïðî ðàçìåùåíèå êîìïîíåíò íà ôîðìå ïîäîáíî íàáîðó DelphiX è ò. ï. - ñðàçó ñêàæó, âñ¸ ýòî ãëóïîñòè.
Èíîãäà ÿ ãîâîðþ "íåîáõîäèìî ïåðåäàòü àäðåñ ïåðåìåííîé" - íî â íåêîòîðûõ ñëó÷àÿõ ñèìâîë @ ïåðåä ïåðåìåííîé íå ñòàâèòñÿ, à èíîãäà îí åñòü. Ñìîòðèòå èíòåðôåéñû ôóíêöèé â çàãîëîâî÷íûõ ôàéëàõ - âû âñòðåòèòå çàðåçåðâèðîâàííûå ñëîâà var, out è const, êîòîðûå óêàçûâàþò íà íåîáõîäèìîñòü ðàáîòû ñ àäðåñàìè.
×òî âàì ïîíàäîáèòñÿ
Âñå ïðîåêòû ñòðîèëèñü â IDE Delphi 5.  âåðñèè 3 îøèáêè áóäóò âîçíèêàòü óæå íà ýòàïå êîìïèëÿöèè, õîòÿ áû èç-çà òîãî, ÷òî â ìîäóëå DirectXGraphics.pas ïîâñåìåñòíî èñïîëüçóåòñÿ òèï LongWord, â òðåòüåé âåðñèè íåîïðåäåë¸ííûé.  âåðñèè 4 êîìïèëèðîâàòü íå ïðîáîâàë, å¸ ó ìåíÿ íåò, âîçìîæíî (íå çíàþ òî÷íî), â ñðåäå íå áóäóò îòîáðàæàòüñÿ ôîðìû ïðîåêòîâ. Òàêæå íåîáõîäèìû ôàéëû çàãîëîâêîâ äëÿ DirectX. Õîòÿ ñóùåñòâóåò ìíîæåñòâî ðàçëè÷íûõ ôàéëîâ, äëÿ òîãî, ÷òîáû ñëåäîâàòü õîòü êàêîìó-òî ñòàíäàðòó, ÿ èñïîëüçîâàë ôàéëû çàãîëîâêîâ, çàãðóæåííûå ñ ñàéòà www.delphi-jedi.org/delphigraphics. Ýòè ôàéëû ðàçðàáîòàíû ýíòóçèàñòàìè è ïðåäñòàâëÿþò ñîáîé ïåðåëîæåíèå ôàéëîâ DirectX SDK ôèðìû Microsoft íà ÿçûê Object Pascal. È, êîíå÷íî æå, íóæíû runtime-áèáëèîòåêè DirectX 8. Èõ ìîæíî óñòàíîâèòü ñ êîìïàêò-äèñêà DirectX SDK ôèðìû Microsoft.  êðàéíåì ñëó÷àå âîçüìèòå êàêóþ-íèáóäü íîâóþ èãðó.
Åñëè âû âñ¸ æå ðåøèòå èçó÷àòü DirectX ïî ìîèì ïðèìåðàì, òî ñïåðâà ïðî÷èòàéòå ôàéëû readme.txt è BUGS.txt - â í¸ì ÿ îïèñàë íåêîòîðûå âîçíèêøèå ïðîáëåìû è íåäîðàáîòêè.
Ñêà÷àòü ïðèìåðû: DirectX_Smpl.zip (125 K)
Îïèñàíèÿ ïðèìåðîâ:
- Enum
Èíîãäà íåîõîäèìî óçíàòü, êàêîå îáîðóäîâàíèå óñòàíîâëåíî â êîìïüþòåðå, óäîâëåòâîðÿåò ëè îíî ïðåäúÿâëåííûì òðåáîâàíèÿì è ò. ä. Íàïðèìåð, ê êîìïüþòåðó ìîæåò áûòü ïîäêëþ÷åíî íåñêîëüêî èãðîâûõ êîíòðîëëåðîâ, è íóæíî äàòü âîçìîæíîñòü èãðîêó âûáðàòü äëÿ óïðàâëåíèÿ îäíî èç íèõ, à íå ïåðâîå ïîïàâøååñÿ. Ê òîìó æå, èõ âîîáùå ìîæåò íå áûòü, è îá ýòîì òîæå íàäî çíàòü. Åñëè óñòàíîâëåíû äâå çâóêîâûå êàðòû, òî îäíà èç íèõ ìîæå èìåòü àïïàðàòíóþ ïîääåðæêó DirectX, à äðóãàÿ - íåò. Îäíèì ñëîâîì, íóæíî èìåòü ñïèñîê íàëè÷åñòâóþùåãî îáîðóäîâàíèÿ. DirectX è åãî êîìïîíåíòû ìîãóò îáåñïå÷èòü òàêîå ïåðå÷èñëåíèå ðàçíûõ óñòðîéñòâ äëÿ èõ âûáîðà.
 ýòîì ïðîåêòå â ïðîñòîé ôîðìå îñóùåñòâëÿåòñÿ ïåðå÷èñëåíèå óñòàíîâëåííûõ âèäåîàäàïòåðîâ, çâóêîâûõ êàðò è óñòðîéñòâ ââîäà. Íàäåþñü, âû ðàçáåð¸òåñü ñ ýòèìè âîçìîæíîñòÿìè DirectX ñàìîñòîÿòåëüíî.
- DirectInput
API
Ïðåæäå ÷åì íà÷àòü çíàêîìèòüñÿ ñ ïðèìåðàìè ïî DirectInput, æåëàòåëüíî èçó÷èòü îáùèé ìåõàíèçì ðàáîòû ýòîãî API, ò .ê. îí îäèíàêîâ â îáùèõ ÷åðòàõ äëÿ âñåõ óñòðîéñòâ ââîäà. Âïîñëåäñòâèè ÿ íå áóäó îñòàíàâëèâàòüñÿ íà ïîâòîðÿþùèõñÿ ïðè¸ìàõ, ò. ê. îáúÿñíþ èõ ñóòü çäåñü.
- Sprite
Ýòîò ïðèìåð äåìîíñòðèðóåò âûâîä èçîáðàæåíèÿ ñðåäñòâàìè DirectDraw. Îí ïîñòðîåí áåç èñïîëüçîâàíèÿ VCL, íî ÿ íàäåþñü ýòî íå ïîìåøàåò âàì.
- Sound
Îäíèì èç äîñòîèíñòâ êîìïîíåíòû DirectSound ÿâëÿåòñÿ òî, ÷òî îíà èìååò ïðÿìîé (íó, ïî÷òè ïðÿìîé) äîñòóï ê àïïàðàòíîìó îáåñïå÷åíèþ çâóêîâîé êàðòû. Ñðåäè èíòåðåñíûõ âîçìîæíîñòåé ñëåäóåò âûäåëèòü ðàçìåùåíèå äàííûõ â ïàìÿòè çâóêîâîé ïëàòû, èñïîëüçîâàíèå àïïàðàòíîãî ìèêøèðîâàíèÿ çâóêà, âîçìîæíîñòü ñîçäàâàòü îáú¸ìíûé çâóê, èñïîëüçóÿ ñïåöèàëüíûå àëãîðèòìû (ýòî íóæíî äëÿ 3D-èãð) - âñ¸ ýòî ìóëüòèìåäèà-ñðåäñòâà Windows îáåñïå÷èòü íå â ñîñòîÿíèè
Äàëåå: DirectX äëÿ íà÷èíàþùèõ. Ñ÷èòûâàíèå è çàïèñü »»