آشنايي با DirectX و OpenGL
نويسنده:علي حسيني
اشاره :
API گرافيكي چيست؟
Microsoft DirectX
DirectX شامل APIهايي است كه دسترسي به بخشهاي ويژهاي از سختافزار مانند تراشههاي شتابدهنده گرافيك سهبعدي و كارت صوتي را ميسرميكند. اين APIها كنترل توابع سطح پايين، يعني نزديك به سختافزار، شامل شتابدهنده گرافيكي دو بعدي، پشتيباني از دستگاههاي ورودي مانند دسته بازي، صفحهكليد و ماوس، و كنترل ميكس و خروجي صدا را انجام ميدهند.
DirectX 7.0 در سال 1999 با شش كامپوننت عرضه شد كه عبارت بودند از: Direct3D،DirectDraw ،DirectSound ،DirectPlay ،DirectInput و DirectMusic.
در اواخر سال 2000 ميلادي، DirectX 8.0 عرضه شد كه در آن كامپوننتهاي DirectSound و DirectMusic با هم ادغام شدند و با نام كامپوننت Direct Audio معرفي شدند.
Direct3D و DirectDraw نيز با هم ادغام شدند و يك كامپوننت با نام DirectX Graphics را ساختند. DirectShow نيز به صورت يك API جداگانه پيادهسازي شد و به يكي از كامپوننتهاي DirectX تبديل گرديد.
DirectX 9.0 در ژانويه سال 2003 عرضه شد. ويژگيهاي خاص اين نسخه عبارتند از:
- قابليتهاي صوتي جديد در DirectSound
- سختافزار رندركننده ويديويي با شتاب بيشتر
- بهبود قابليت برنامهريزي گرافيكي
APIهاي همه كامپوننتهاي DirectX برپايه COM يا Component Object Model هستند. در ادامه به بررسي هفت كامپوننت DirectX 9.0 ميپردازيم كه عبارتند از: DirectDraw ،Direct3D ،DirectShow ،DirectSound ،DirectMusic ،DirectInput و DirectPlay.
1- DirectDraw
هر برنامه كاربردي DirectDraw الگوي يكساني دارد كه عبارت است از:
- ايجاد يك شي
- شروع حلقه
- انتقال به مانتيور
- پايان حلقه
- پاك كردن آن شي
منظور از واژه <يك شي> ميتواند هر تصوير دوبعدياي باشد و منظور از حلقه، حلقهاي است كه در برنامهنويسي هنگام تكرار منظم دستهاي از دادهها يا دستورها به كار ميبريم. تصوير ايجادشده پس از مدتي پاك ميشود و جاي خود را به تصوير ديگري ميدهد.
2- Direct3D
Hardware Abstraction Layer) HAL) است.
HAL با قابليتهايي كه به صورت گسترده در سختافزارهاي گرافيك سهبعدي پيادهسازي شدهاند ارتباط ايجاد ميكند و به سازندگان امكانميدهد درايورهايي را توليد كنند كه لايه HAL را به سختافزار پيوند دهد. اين كار باعث ميشود برنامههاي كاربردي Direct 3D بدون اينكه براي نوع خاصي از قطعه سختافزاري نوشته شده باشد، از ويژگيهاي بخشهاي خاص آن قطعه سختافزاري بهرهببرد. در شكل يك چگونگي ارتباط لايه HAL با سختافزار و نرمافزارهاي مرتبط نشان داده شده است.
شكل 1 - چگونگي ارتباط لايه HAL با كارت گرافيك و نرمافزارهاي مرتبط
در سيستم رندر Direct3D، ساختار اشياي سهبعدي پيش از آنكه شتابدهنده سهبعدي، يك صحنه سهبعدي را رندر نمايد و آن را به مانيتور منتقل كند، به وسيله CPU پردازش ميشود. نسخه ششم كامپوننت Direct3D از قابليتهاي كارتهاي گرافيك جديدتر پشتيباني مينمايد و در هر گذر، چندين بافت را با هم رندر ميكند.
كاهش زمان رندر به استفاده از نقشه بافتها نياز دارد. اين نسخه تكنيكهايي براي افزودن جلوهاي واقعيتر به صحنههاي سه بعدي را نيز دربردارد.
مانند anistropic filtering كه عنصر عمق را به trilinear filtering و نقشه برجستهسازي ميافزايد كه موجب ايجاد شباهت بيشتر بافتها و نيز منابع نور تابيده شده بر سطوح مسطح با نمونههاي واقعي آنها ميشود.
نسخه هفتم DirectX نسبت به نسخههاي پيش از خود بيست درصد سريعتر و شامل چند ويژگي ديگر بود. مهمترين آنها پشتيباني از تغييرات شتاب سختافزاري و نوردهي (T&L) به وسيله اغلب كارتهاي گرافيك سهبعدي آنزمان به ويژه كارتهايي است كه برپايه تراشههاي nVidia Geforce 256 و S3 Savage 2000 ساخته شدهاند. از زماني كه T&L عرضه شد، وقتگيرترين وظيفه CPU هنگام اجراي بازيهاي پيشرفته به شتابدهنده سهبعدي داده شد و بخش بزرگي از ظرفيت پردازنده اصلي به كارهاي ديگر مانند هوشمصنوعي بازي اختصاص داده شد و توسعهدهندگان بازي توانستند رندر را با جزئيات بيشتر انجام دهند و جلوههاي ويژه پيچيدهتري را در بازيها بهكار ببرند.
3- DirectShow
filter شناخته ميشوند تقسيم ميكند.
فيلترها تعدادي pin ورودي و خروجي دارند كه آنها را به هم متصل ميكند. طراحي كلي سازوكار اتصال به اين صورت است كه فيلترها ميتوانند به روشهاي مختلف به هم متصل شوند كه هر نوع از اين اتصالها به معني انجام دادن يك كار است و توسعهدهندگان نرمافزار ميتوانند افكتهاي خود يا فيلترهاي ديگري را به بخشي از اين گراف براي انجام كار ويژهاي بيفزايند. گراف فيلتر DirectShow به صورت گسترده در ضبط صدا و فيلم، و ويرايش آنها به كار ميرود.
شكل 2 - يك گراف فيلتر كه كار نمايش يك فايل MPEG را نشان ميدهد.
دادههاي چند رسانهاي در اين گراف (در حالي كه كارها به وسيله برنامه كاربردي كنترل ميشوند) از فايل منبع به سمت مقصد كه ميتواند يك قطعه سختافزاري باشد حركت ميكنند.
ولي در برخي مواقع، برنامه كاربردي علاوه بر كنترل گراف، دريافتكننده يا فرستنده داده نيز هست.
هر گره اين گراف، همانگونه كه گفته شد، يك فيلتر است و كار ويژه خود را انجام ميدهد. فيلتر source، دادهها را از يك فايل يا URL ميخواند. فيلتر Parser، بخشهايي از دادههاي صوتي و ويديويي را به رمزگشاي مناسب ميفرستد. رمزگشاها، دادههاي صوتي و ويديويي را رمزگشايي مينمايند يا از حالت فشردگي خارج ميكنند.
فيلتر رندركننده، دادههاي دريافت شده صوتي و ويديويي از رمزگشا را پخش ميكند يا آنها را نمايش ميدهد.
4- DirectSound
برنامههاي چندرسانهاي با اين كامپوننت به سختافزارهاي صوتي مانند كارت صوتي دسترسي پيداميكنند. از مهمترين ويژگيهاي اين API، تركيب صدا و كنترل سطح آن است.
DirectSound همچنين اجازه ميدهد چندين برنامه كاربردي، بدون پيش آوردن وقفه، همزمان به كارت صوتي دسترسي داشته باشند. ايجاد افكتهاي صوتي از ديگر تواناييهاي DirectSound است. پس از سالها توسعه، اكنون DirectSound يك API پخته و كامل است و بسياري قابليتهاي ديگر را نيز فراهم ميكند؛ مانند قابليت پخش صداهاي چند كاناله با وضوح و دقت بالا.
5- DirectMusic
اين درجه ميتواند بسته به نوع عملكرد شخصيت بازي، تغيير كند. اگر شخصيت بازي در حال راه رفتن است، آهنگ آرام و هنگامي كه با دشمن خود مبارزه ميكند، آهنگ تندتر ميشود و يا نوع آهنگ تغيير ميكند و هنگامي كه مبارزه تمام ميشود، آهنگ دوباره آرام ميشود. اين تغييرها بدون ايجاد وقفه، به صورت پويا و بدون دخالت كاربر انجام ميشود. چون براساس DirecMusic، آهنگ به صورت شناور و بدون وقفه با نواختن وارياسيونهاي مختلف با قابليت واكنش به رويدادهاي بازي توليد ميشود.
DirectMusic، با دادههاي موسيقي براساس پيامهاي حاوي اطلاعات كار ميكند. يك آهنگ ميتواند در داخل سختافزار و با نرمافزارهاي آهنگساز مانند Microsoft Synthesizer ساخته شود. DirectMusic از استانداردهايMIDI و DLS پشتيباني ميكند.
6- DirectInput
7- DirectPlay
در واقع يك session يا جلسه در DirectPlay يك كانال ارتباطي بين چندين كامپيوتر است. يك برنامه كاربردي پيش از آنكه بتواند با سيستمهاي ديگر ارتباط برقرار كند، بايد در يك Session يا جلسه باشد. هر جلسه تنها يك ميزبان دارد و آن برنامه كاربردياي است كه آن جلسه را ايجاد كردهاست. تنها ميزبان ميتواند ويژگيهاي يك Session را تغيير دهد.
DirectX 9.0
HLSL با همه پردازشگرهاي گرافيكي (GPU) سازگار با DirectX كار ميكند و به توسعهدهندگان امكان ميدهد افكتهاي بصري را روي گستره وسيعتري از پلتفرمها ايجاد كنند؛ بدون اينكه نياز داشته باشند به جزئيات سختافزار گرافيكي توجه كنند.
DirectX 9.0 روي ويندوز 95 نصب نميشود. چون بازيهايي كه به DirectX 9.0 نياز دارند، به كامپيوترهاي جديدتر و قويتري هم نياز دارند كه ويندوز 98 يا نسخههاي جديدتر روي آنها نصب ميشود. تاكنون نسخههاي a ،b و c از DirectX 9.0 ارائه شده است. هر نسخه جديدتر از DirectX داراي امنيت، كارايي و سيستم رفع خطاي بهتري است.
DirectX 10
تا زمان نوشته شدن اين مقاله هنوز نسخه رسمي ويندوز ويستا عرضه نشده است. ولي به نظر ميآيد اين ويندوز، هم از DirectX 10 و هم از DirectX 9.0 پشتيباني خواهد كرد.
SGL OpenGL
بنابراين SGI نمونه برنامهاي را توليد كرد كه توليدكنندگان سختافزار بايد از آن براي توسعه درايورهاي OpenGL در سختافزارهايشان استفاده كنند. اين برنامه به صورت اپنسورس ارائه شدهاست. ولي سازندگان اين سختافزارها ميتوانند قابليتهاي گوناگوني را برپايه OpenGL در سختافزارهايشان ايجاد كنند. تصميمگيري درباره ايجاد تغييرات در OpenGL را كنسرسيوم ARB اتخاذ ميكند.
اين كنسرسيوم شامل اعضاي مهمي همچون اپل، اينتل، آيبيام، سان، ATI، دل، nVIDIA، سيليكونگرافيكس و3Dlabs است و از سوي شركتهاي معتبر ديگري مانند متراكس، S3 ،Xi و Quantum 3D حمايت ميشود. توسعهدهندگان نرمافزار براي استفاده از OpenGL در نرمافزارهايشان نيازي به اخذ مجوز ندارند. ولي توليدكنندگان سختافزار براي پيادهسازي سختافزاري OpenGL نيازمند اخذ مجوز از SGI هستند.
OpenGL چيست؟
در سال 1996، نويسندگان و توسعهدهندگان بازيهاي كامپيوتري از نسخه ويندوزي OpenGL براي ساخت بازيهاي كامپيوتري استفاده كردند. OpenGL براي پشتيباني از گستره وسيعي از تكنيكهاي رندركردن گرافيكي پيشرفته طراحي شده است كه ميتوان پارهاي از آنها را به اينصورت نام برد:
نورپردازي: قابليت تحليل ميزان رنگ هنگام تابش مدلهاي متفاوت نور به يك سطح از يك يا چند منبع نور مختلف.
سايهسازي نرم: قابليت تحليل افكتهاي سايه هنگام تابش نور به يك زاويه و ايجاد اختلاف نور خفيف در مقابل آن سطح (مانند نور كمي كه هنگام تابش آفتاب به يك صخره يخي در اطراف آن ايجاد ميشود).
حركت محو ومدلسازي: توانايي تغيير مكان و اندازه پرسپكتيو يك شي در فضاي سه بعدي.
مجموعه امكانات OpenGL شبيه Direct3D است. ولي API سطح پايينتر آن (نزديكتر به سطح سختافزار) باعث ميشود كنترل خوبي روي عناصر اصلي ايجاد صحنههاي سه بعدي مانند اطلاعات سهضلعيها كه سلولهاي تشكيلدهنده يك مدل سه بعدي هستند داشته باشد.
دو سطح پشتيباني از شتابدهندگي سختافزاري براي OpenGL وجود دارد: installing client driver) ICDs) كه به نوردهي ايجاد تغيير و رستركردن (تبديل يك فريم سه بعدي چند ضلعي ذخيره شده درframe buffer به يك تصوير كامل با بافتها و نشانههاي عمق و نور) شتاب ميدهد و mini client server) MCs) كه از رستركردن پشتيباني ميكند.
OpenGL 1.4 و OpenGL 1.5 بهترتيب در تابستان 2002 و 2003 معرفي شدند كه هر يك امكانات و كاربردهاي بيشتري از نسخههاي پيش از خود داشتند. بزرگترين آنها OpenGL Shading Language بود؛ زباني ويژه برنامهنويسي vertex-shader و pixel-shader كه در صورت نياز به OpenGL الصاق ميشد. OpenGLShading Language زباني شد كه به سرعت در سطح گستردهاي مورد پشتيباني يونيكس، ويندوز، لينوكس و ديگر سيستمعاملها براي توسعهدهنده گرافيكهاي تعاملي و برنامههاي كاربردي ترسيمي قرار گرفت.
OpenGL 2.0
- سايهزني قابل برنامهريزي بهوسيله OpenGL Shader Language و APIهاي آن. قدرت ايجاد Shader و برنامهنويسي اشيا، بخش ديگري از تغييرات ايجاد شده در اين نسخه است.
- رندر چندگانه كه به shaderهاي قابل برنامهنويسي امكان ميدهد در بافرهاي خروجي چندگانه در يك گذر مقادير مختلفي بنويسند.
- بافتهاي دو طرفه، با قابليت تعريف كاربرد آن بافت براي سطح جلو و پشت يك مدل اوليه كه كيفيت حجم سايه و كارايي الگويمهاي رندر هندسي اشياي سخت را ارتقا ميدهد.
- Spriteهاي نقطه كه مختصات بافت يك نقطه را با مختصات بافت قرار داده شده در مقابل آن نقطه جابهجا ميكنند و رسم نقاط را در بافتهاي طراحي شده در كامپيوترهاي معمولي نيز ممكن ميسازند.
- بافتهاي Non-power-of-two كه براي همه انواع بافت كاربرد دارد كه در نتيجه از بافتهاي چهارگوش پشتيباني مينمايد و درعمل حافظه كمتري اشغال ميكند.
OpenAL
كتابخانه اين API مجموعهاي از صداهاي قابل حركت در فضاي سهبعدي را مدلسازي ميكند. عناصر اصلي OpenAL شامل يك شنونده، يك منبع و يك بافر است. ممكن است تعداد زيادي بافر وجودداشته باشد كه شامل دادههاي صوتي هستند. هر بافر ميتواند به يك يا چند منبع ضميمه شود. هميشه يك عنصر شنونده (براي محتواي صوتي) وجود دارد كه موقعيت مكاني منبع صوتي كه صداي آن شنيده ميشود را نشان ميدهد. OpenAL در موتورهاي گرافيكي Epic Games Unreal نيز براي ساخت افكتهاي صوتي به كار ميرود.
OpenGL Performer
OpenGL Volumizer
OpenGL Multipipe SDK
نتيجهگيري
منبع: http://www.nscomshop.com
/خ