تاريخ عضويت: 5 شنبه 28 آذر 1387 تعداد ارسالها: 220 محل سكونت: I live in...
1 شنبه 2 فروردين 1388 - 11:57
آشنايي با DirectX و OpenGL
يك بازي كامپيوتري را روي كامپيوترتان اجرا ميكنيد. فعلاً كارت گرافيك شما روي اسلاتAGP سوار ميشود، پردازشگر سلرون داريد و ... پس از چند ماه يا چند سال كامپيوتر جديدي ميخريد. اكنون اسلات كارت گرافيكي شما PCI Express است و يك پردازشگر 64 بيتي داريد. همان بازي را روي اين كامپيوتر هم نصب و اجراميكنيد! شايد به نظر طبيعي ميآيد كه همه چيز بايد همينطور باشد. اما چگونه يك بازي روي كامپيوترهايي با تراشهها و سختافزارهاي مختلف و گاه فناوري متفاوت اجرا ميشود؟ APIهاي گرافيكي يا همان رابطهاي برنامهنويسي، بخش بزرگي از اين مشكل را حل ميكنند و امكانات گسترده ديگري را نيز در اختيار برنامهنويسان و توسعهدهندگان بازي و برنامههاي چندرسانهاي قرارميدهند. OpenGL وDirectX، دو مجموعه API گرافيكي و صوتي هستند كه براي آسانتر ساختن توسعه بازيها و نرمافزارهاي چندرسانهاي طراحي شدهاند.
API گرافيكي چيست؟
API درواقع بين برنامه و سختافزاري كه برنامه روي آن اجرا ميشود، نقش يك هماهنگكننده را دارد و مانند پلي ميان سختافزار و نرمافزار ارتباط ايجادميكند. يعني برنامهنويس كدهايي مينويسد كه دادههاي گرافيكي خود را به وسيله دستورهاي استانداردي به درايور API ميفرستد نه مستقيماً به خود سختافزار. سپس درايوري كه شركت سازنده سختافزار توليدكرده است، اين كداستاندارد توليدشده را به فرمت بومي و ويژهاي كه براي آن مدل خاص سختافزار قابل شناسايي است، ترجمه ميكند.
Microsoft DirectX
شركت مايكروسافت در سال 1995 DirectX (http://en.wikipedia.org/wiki/DirectX) را ساخته و توسعه دادهاست. اين نرمافزار شامل مجموعه يكپارچهاي از ابزارهاي برنامهنويسي است كه به توسعهدهندگان امكان ميدهد انواع مختلف نرمافزارهاي مالتيمديا را روي پلتفرم ويندوز توليد كنند. DirectX به برنامهاي كه بر پايه آن طراحي شده امكان ميدهد به آساني قابليتهاي سختافزار كامپيوتر را شناسايي كند و پارامترهاي برنامه را با آن هماهنگ سازد.
DirectX (http://www.microsoft.com/windows/directx/default.mspx) شامل 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 عرضه شد. ويژگيهاي خاص اين نسخه عبارتند از:
APIهاي همه كامپوننتهاي DirectX برپايه COM يا Component Object Model هستند. در ادامه به بررسي هفت كامپوننت DirectX 9.0 ميپردازيم كه عبارتند از: DirectDraw ،Direct3D ،DirectShow ،DirectSound ،DirectMusic ،DirectInput و DirectPlay.
1- DirectDraw
DirectDraw، كامپوننتي ويژه طراحي دوبعدي است كه به برنامهنويس اجازه ميدهد مستقيماً به حافظه كارت گرافيك دسترسي يابد، صحنهها و فريمها را با هم تركيب نمايد يا bitmapها را در آنجا ذخيره كند. همچنين، براي برنامهها امكان دسترسي به سختافزارهاي ويژه نمايش را مستقل از نوع سختافزار فراهم ميكند.
هر برنامه كاربردي DirectDraw الگوي يكساني دارد كه عبارت است از:
- ايجاد يك شي
- شروع حلقه
- انتقال به مانتيور
- پايان حلقه
- پاك كردن آن شي
منظور از واژه <يك شي> ميتواند هر تصوير دوبعدياي باشد و منظور از حلقه، حلقهاي است كه در برنامهنويسي هنگام تكرار منظم دستهاي از دادهها يا دستورها به كار ميبريم. تصوير ايجادشده پس از مدتي پاك ميشود و جاي خود را به تصوير ديگري ميدهد.
2- Direct3D
اين كامپوننت، دسترسي به توابع رندركننده گرافيك سهبعدي تعبيه شده در بيشتر كارتهاي گرافيك را فراهم ميكند. Direct3D يك API سطح پايين سهبعدي است كه به نرمافزار امكان ميدهد مستقل از سختافزار، با سختافزار شتابدهنده ارتباط برقرار كند. لايهاي كه براي توسعهدهندگان بازي و گرافيك كامپيوتري امكان طراحي و ساخت بازيها را مستقل از سختافزار كامپيوترها فراهم ميكند، لايهاي به نام
Hardware Abstraction Layer) HAL) است.
HAL با قابليتهايي كه به صورت گسترده در سختافزارهاي گرافيك سهبعدي پيادهسازي شدهاند ارتباط ايجاد ميكند و به سازندگان امكانميدهد درايورهايي را توليد كنند كه لايه HAL را به سختافزار پيوند دهد. اين كار باعث ميشود برنامههاي كاربردي Direct 3D بدون اينكه براي نوع خاصي از قطعه سختافزاري نوشته شده باشد، از ويژگيهاي بخشهاي خاص آن قطعه سختافزاري بهرهببرد. در شكل يك چگونگي ارتباط لايه HAL با سختافزار و نرمافزارهاي مرتبط نشان داده شده است.
همانگونه كه در شكل يك، نشان داده شده، نرمافزار بازي بالاترين سطح است و پس از آن كامپوننتهاي ترسيم دوبعدي و سه بعدي، يعني DirectDraw و Direct3D قرار دارند. لايه HAL يك رابط ميان كامپوننتهاي DirectX و كارت گرافيك است.
در سيستم رندر Direct3D، ساختار اشياي سهبعدي پيش از آنكه شتابدهنده سهبعدي، يك صحنه سهبعدي را رندر نمايد و آن را به مانيتور منتقل كند، به وسيله CPU پردازش ميشود. نسخه ششم كامپوننت Direct3D از قابليتهاي كارتهاي گرافيك جديدتر پشتيباني مينمايد و در هر گذر، چندين بافت را با هم رندر ميكند.
كاهش زمان رندر به استفاده از نقشه بافتها نياز دارد. اين نسخه تكنيكهايي براي افزودن جلوهاي واقعيتر به صحنههاي سه بعدي را نيز دربردارد.
مانند anistropic filtering كه عنصر عمق را به trilinear filtering و نقشه برجستهسازي ميافزايد كه موجب ايجاد شباهت بيشتر بافتها و نيز منابع نور تابيده شده بر سطوح مسطح با نمونههاي واقعي آنها ميشود.
نسخه هفتم DirectX نسبت به نسخههاي پيش از خود بيست درصد سريعتر و شامل چند ويژگي ديگر بود. مهمترين آنها پشتيباني از تغييرات شتاب سختافزاري و نوردهي (T&L) به وسيله اغلب كارتهاي گرافيك سهبعدي آنزمان به ويژه كارتهايي است كه برپايه تراشههاي nVidia Geforce 256 و S3 Savage 2000 ساخته شدهاند. از زماني كه T&L عرضه شد، وقتگيرترين وظيفه CPU هنگام اجراي بازيهاي پيشرفته به شتابدهنده سهبعدي داده شد و بخش بزرگي از ظرفيت پردازنده اصلي به كارهاي ديگر مانند هوشمصنوعي بازي اختصاص داده شد و توسعهدهندگان بازي توانستند رندر را با جزئيات بيشتر انجام دهند و جلوههاي ويژه پيچيدهتري را در بازيها بهكار ببرند.
3- DirectShow
اين كامپوننت از بسياري از فرمتهاي صوتي و ويديويي شامل AVI ،MPEG ،ASF ،WMA/WMV ،DV و MP3 و DirectX پشتيباني ميكند و روي ويندوزهاي 98، 2000، اكسپي و نرمافزار اينترنت اكسپلورر عرضه شده است.DirectShow پروسه كارهاي مالتيمديا مانند نمايش فايل ويديويي را به مجموعهاي از مراحل كه با نام
filter شناخته ميشوند تقسيم ميكند.
فيلترها تعدادي pin ورودي و خروجي دارند كه آنها را به هم متصل ميكند. طراحي كلي سازوكار اتصال به اين صورت است كه فيلترها ميتوانند به روشهاي مختلف به هم متصل شوند كه هر نوع از اين اتصالها به معني انجام دادن يك كار است و توسعهدهندگان نرمافزار ميتوانند افكتهاي خود يا فيلترهاي ديگري را به بخشي از اين گراف براي انجام كار ويژهاي بيفزايند. گراف ----- DirectShow به صورت گسترده در ضبط صدا و فيلم، و ويرايش آنها به كار ميرود.
http://i14.tinypic.com/350tr0w.jpg
شكل 2 - يك گراف ----- كه كار نمايش يك فايل MPEG را نشان ميدهد (http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_2_s.jpg)
در شكل دو، يك گراف نمايش براي فايل فيلمي از نوع MPEG نشان داده شده است. برنامههاي كاربردي DirectShow، براي پردازش دادههاي مالتيمديا، از اين گراف استفاده ميكنند.
دادههاي چند رسانهاي در اين گراف (در حالي كه كارها به وسيله برنامه كاربردي كنترل ميشوند) از فايل منبع به سمت مقصد كه ميتواند يك قطعه سختافزاري باشد حركت ميكنند.
ولي در برخي مواقع، برنامه كاربردي علاوه بر كنترل گراف، دريافتكننده يا فرستنده داده نيز هست.
هر گره اين گراف، همانگونه كه گفته شد، يك ----- است و كار ويژه خود را انجام ميدهد. ----- source، دادهها را از يك فايل يا URL ميخواند. ----- Parser، بخشهايي از دادههاي صوتي و ويديويي را به رمزگشاي مناسب ميفرستد. رمزگشاها، دادههاي صوتي و ويديويي را رمزگشايي مينمايند يا از حالت فشردگي خارج ميكنند.
----- رندركننده، دادههاي دريافت شده صوتي و ويديويي از رمزگشا را پخش ميكند يا آنها را نمايش ميدهد.
4- DirectSound
اين كامپوننت همزمان با ساخت ويندوز 95، زماني كه درايورهاي صوتي از نوع VXD بودند به DirectX افزوده شد. در اين كامپوننت APIهاي ويژهاي ايجاد شد كه نويسندگان درايورهاي صوتي ميبايست آنها را به محصولات خود، كه فرمت VXD داشت، ميافزودند تا به درستي با DirectSound كار كند.
برنامههاي چندرسانهاي با اين كامپوننت به سختافزارهاي صوتي مانند كارت صوتي دسترسي پيداميكنند. از مهمترين ويژگيهاي اين API، تركيب صدا و كنترل سطح آن است.
DirectSound همچنين اجازه ميدهد چندين برنامه كاربردي، بدون پيش آوردن وقفه، همزمان به كارت صوتي دسترسي داشته باشند. ايجاد افكتهاي صوتي از ديگر تواناييهاي DirectSound است. پس از سالها توسعه، اكنون DirectSound يك API پخته و كامل است و بسياري قابليتهاي ديگر را نيز فراهم ميكند؛ مانند قابليت پخش صداهاي چند كاناله با وضوح و دقت بالا.
5- DirectMusic
تاكنون بازيهايي را تجربه كردهايد كه در تمام مدت يك مرحله، موسيقي يكنواخت و ثابتي دارند؟ بازياي را در نظر بگيريد كه برنامهنويسان آن ميخواهند يك آهنگ، در تمام مدت، در يك مرحله از آن به صدا دربيايد. با استفاده از برنامه DirectMusic Producer، آنها ميتوانند در آن مرحله براي آهنگ، يك درجه در نظر بگيرند.
اين درجه ميتواند بسته به نوع عملكرد شخصيت بازي، تغيير كند. اگر شخصيت بازي در حال راه رفتن است، آهنگ آرام و هنگامي كه با دشمن خود مبارزه ميكند، آهنگ تندتر ميشود و يا نوع آهنگ تغيير ميكند و هنگامي كه مبارزه تمام ميشود، آهنگ دوباره آرام ميشود. اين تغييرها بدون ايجاد وقفه، به صورت پويا و بدون دخالت كاربر انجام ميشود. چون براساس DirecMusic، آهنگ به صورت شناور و بدون وقفه با نواختن وارياسيونهاي مختلف با قابليت واكنش به رويدادهاي بازي توليد ميشود.
DirectMusic، با دادههاي موسيقي براساس پيامهاي حاوي اطلاعات كار ميكند. يك آهنگ ميتواند در داخل سختافزار و با نرمافزارهاي آهنگساز مانند Microsoft Synthesizer ساخته شود. DirectMusic از استانداردهايMIDI و DLS پشتيباني ميكند.
6- DirectInput
اين كامپوننت، سازوكار مشتركي را براي دسترسي به بسياري از كنترلكنندههاي بازي مانند دسته بازي، گيمپد، صفحه كليد و ماوس فراهم ميآورد. مهمترين تغييري كه هنگام عرضه DirectX8 در DirectInput ايجاد شد، آمدنaction map بود. action map از توابعي مانند راندن يك وسيله يا شليك يك گلوله (كه بهوسيله دستگاههاي ورودي ايجاد ميشود) استفاده ميكند. زماني كه يك سختافزار ورودي مانند دسته بازي را ميخريد، معمولا ًaction mapنيز براي بسياري از انواع رايج بازيها مانند شبيهساز پرواز، تيراندازي اول شخص و بازيهاي مسابقهاي در آن پيادهسازي شده است.
7- DirectPlay
اين كامپوننت امكان بازي چند نفر را در بازيهاي چندنفره فراهم ميآورد، دسترسي به سرويسهاي ارتباطي را آسان ميسازد و راهي را براي بازيها فراهم ميكند تا مستقل از پروتكل يا نوع سرويس آنلاين با يكديگر در ارتباط باشند. همچنين از پروتكلهاي ارتباطي مطمئن پشتيبانيميكند تا مانع از گم شدن دادههاي مهم بازي روي شبكه شود. در واقع DirectPlay به صورت لايهاي است كه روي پروتكلهاي معمول شبكه مانند IPX ،TCP/IP و ... قرار دارد.
در واقع يك session يا جلسه در DirectPlay يك كانال ارتباطي بين چندين كامپيوتر است. يك برنامه كاربردي پيش از آنكه بتواند با سيستمهاي ديگر ارتباط برقرار كند، بايد در يك Session يا جلسه باشد. هر جلسه تنها يك ميزبان دارد و آن برنامه كاربردياي است كه آن جلسه را ايجاد كردهاست. تنها ميزبان ميتواند ويژگيهاي يك Session را تغيير دهد.
DirectX 9.0
اين كامپوننت، آخرين نسخه DirectX تا پيش از عرضه رسمي ويندوز ويستا است. مهمترين چيزي كه همراه DirectX 9.0 عرضه شد، High-Level Shader Language) HLSL) است. زبان HLSL جايگزين زبان اسمبلي براي نوشتن pixel shaderها و vertex shaderها در DirectX است. پيش از ارائه DirectX 9.0 توسعهدهندگان بازي بايدshaderها را با استفاده از يك زبان اسمبلي سطح پايين توسعه ميدادند. HLSL با فراهمآوردن يك محيط برنامهنويسي توسعهدهنده ساده، توسعه همه بخشهاي نرمافزار مانند انيميشن و برنامهنويسي افكتها را آسان ميكند.
HLSL با همه پردازشگرهاي گرافيكي (GPU) سازگار با DirectX كار ميكند و به توسعهدهندگان امكان ميدهد افكتهاي بصري را روي گستره وسيعتري از پلتفرمها ايجاد كنند؛ بدون اينكه نياز داشته باشند به جزئيات سختافزار گرافيكي توجه كنند.
DirectX 9.0 روي ويندوز 95 نصب نميشود. چون بازيهايي كه به DirectX 9.0 نياز دارند، به كامپيوترهاي جديدتر و قويتري هم نياز دارند كه ويندوز 98 يا نسخههاي جديدتر روي آنها نصب ميشود. تاكنون نسخههاي a ،b و c از DirectX 9.0 ارائه شده است. هر نسخه جديدتر از DirectX داراي امنيت، كارايي و سيستم رفع خطاي بهتري است.
DirectX 10
دوستداران بازي بايد خوشحال باشند از اينكه بدانند شركت مايكروسافت DirectX را نيز توليد كرده است و همراه پيش توزيع Direct3D 10 عرضه خواهد شد. همچنين نرمافزارMicrosoft Windows Game Explorer نيز عرضه شده كه به برنامهنويسان و توسعهدهندگان امكان ميدهد امكانات بروزكردن خودكار (auto-updating) را به بازيهايشان بيفزايند. مايكروسافت ميخواهد DirectX 9.0 و DirectX 10 را روي ويندوز ويستا عرضه كند. به گفته Rodolph Balaz از برنامهنويسان توسعهدهنده Direct3D و OpenGL در مايكروسافت، DirectX 10 تنها با سيستمعاملهاي جديد كار خواهد كرد و در حال حاضر مايكروسافت، برنامهاي براي پشتيباني ويندوز اكسپي از آن ندارد.
تا زمان نوشته شدن اين مقاله هنوز نسخه رسمي ويندوز ويستا عرضه نشده است. ولي به نظر ميآيد اين ويندوز، هم از DirectX 10 و هم از DirectX 9.0 پشتيباني خواهد كرد.
شركت سيليكون گرافيكس(SGI ،OpenGL) (http://www.sgi.com/products/software/opengl/) را با هدف ساخت يك API براي توسعه برنامههاي گرافيكي دوبعدي و سه بعدي عرضهكردهاست. پيش از ساخته شدن APIهاي گرافيكي مانند OpenGL (http://en.wikipedia.org/wiki/OpenGL) و DirectX، بسياري از توليدكنندگان سختافزار، كتابخانههاي گرافيكي مختلف و متفاوتي داشتند. به همين دليل پشتيباني از نسخههاي مختلف نرمافزارهايشان روي پلتفرمهاي سختافزاري مختلف هزينهبر و انتقال يك برنامه كاربردي از يك پلتفرم سختافزاري به پلتفرم سختافزاري ديگر بسيار وقتگير و سخت بود.
بنابراين SGI نمونه برنامهاي را توليد كرد كه توليدكنندگان سختافزار بايد از آن براي توسعه درايورهاي OpenGL در سختافزارهايشان استفاده كنند. اين برنامه به صورت اپنسورس ارائه شدهاست. ولي سازندگان اين سختافزارها ميتوانند قابليتهاي گوناگوني را برپايه OpenGL در سختافزارهايشان ايجاد كنند. تصميمگيري درباره ايجاد تغييرات در OpenGL را كنسرسيوم ARB اتخاذ ميكند.
اين كنسرسيوم شامل اعضاي مهمي همچون اپل، اينتل، آيبيام، سان، ATI، دل، nVIDIA، سيليكونگرافيكس و3Dlabs است و از سوي شركتهاي معتبر ديگري مانند متراكس، S3 ،Xi و Quantum 3D حمايت ميشود. توسعهدهندگان نرمافزار براي استفاده از OpenGL در نرمافزارهايشان نيازي به اخذ مجوز ندارند. ولي توليدكنندگان سختافزار براي پيادهسازي سختافزاري OpenGL نيازمند اخذ مجوز از SGI هستند.
OpenGL چيست؟
در اوايل پيدايش OpenGL، از اين API در كارهاي صنعتي، طراحي وسايل داخلي، مكانيكي و نيز در آناليزهاي علمي و آماري استفاده ميشد.
در سال 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 2.0 آخرين نسخه عرضه شده تا اوايل سال 2006 ميلادي است. OpenGL Shader Language همراه با اين نسخه عرضه شده و بر پايه استاندارد ANSYC طراحي شده است. برخي قابليتهاي تازه اين نسخه عبارتند از:
- سايهزني قابل برنامهريزي بهوسيله OpenGL Shader Language و APIهاي آن. قدرت ايجاد Shader و برنامهنويسي اشيا، بخش ديگري از تغييرات ايجاد شده در اين نسخه است.
- رندر چندگانه كه به shaderهاي قابل برنامهنويسي امكان ميدهد در بافرهاي خروجي چندگانه در يك گذر مقادير مختلفي بنويسند.
- بافتهاي دو طرفه، با قابليت تعريف كاربرد آن بافت براي سطح جلو و پشت يك مدل اوليه كه كيفيت حجم سايه و كارايي الگويمهاي رندر هندسي اشياي سخت را ارتقا ميدهد.
- Spriteهاي نقطه كه مختصات بافت يك نقطه را با مختصات بافت قرار داده شده در مقابل آن نقطه جابهجا ميكنند و رسم نقاط را در بافتهاي طراحي شده در كامپيوترهاي معمولي نيز ممكن ميسازند.
- بافتهاي Non-power-of-two كه براي همه انواع بافت كاربرد دارد كه در نتيجه از بافتهاي چهارگوش پشتيباني مينمايد و درعمل حافظه كمتري اشغال ميكند.
OpenAL
OpenAL، يك API ديگر است كه براي ايجاد و مديريت صداهاي سه بعدي در بازيهاي كامپيوتري و ديگر انواع نرمافزارها به صورت يك پروژه مشترك ميان شركت Loki Software و Creative ساخته شده است.
كتابخانه اين API مجموعهاي از صداهاي قابل حركت در فضاي سهبعدي را مدلسازي ميكند. عناصر اصلي OpenAL شامل يك شنونده، يك منبع و يك بافر است. ممكن است تعداد زيادي بافر وجودداشته باشد كه شامل دادههاي صوتي هستند. هر بافر ميتواند به يك يا چند منبع ضميمه شود. هميشه يك عنصر شنونده (براي محتواي صوتي) وجود دارد كه موقعيت مكاني منبع صوتي كه صداي آن شنيده ميشود را نشان ميدهد. OpenAL در موتورهاي گرافيكي Epic Games Unreal نيز براي ساخت افكتهاي صوتي به كار ميرود.
OpenGL Performer
OpenGL Performer، رابط برنامهنويسي قدرتمند و كاملي است كه توسعهدهندگان براي شبيهسازي بصري از آن استفاده ميكنند. ابزارهاي موجود در آن، توسعه برنامههاي شبيهسازي بصري، طراحي بر اساس شبيهسازي، واقعيت مجازي، نرمافزارهاي علمي، سرگرميهاي تعاملي، برنامههاي ويديويي و طراحي با كامپيوتر را آسان ميكند. اين رابط برنامهنويسي به برنامهنويسان امكان ميدهد از قابليتهاي سيستم به صورت بهينه استفاده كنند. آخرين نسخه اين نرمافزار OpenGL Performer 3.2 است.
OpenGL Volumizer
OpenGL Volumizer، يك API گرافيكي است كه در بخشهاي انرژي، توليد، داروسازي و تجارت كاربرد دارد. اين API براي انجام كارهاي تعاملي با كيفيت بالا و بصري نمودن و شبيهسازي يك محيط با استفاده از مجموعه بزرگي از دادههاي حجمي (دادههايي كه مختصات يك شي در فضاي سه بعدي را نشان ميدهند) طراحي شده است. براي نمونه در نرمافزارهاي پزشكي براي شبيهسازي وضعيت بخش خاصي از بدن، از اين نرمافزار استفاده ميشود. OpenGL Volumizer آخرين نسخه اين API تا اوايل سال 2006 ميلادي است كه بر پايه كتابخانه گرافيكي استانداردOpenGL ساخته شده و شامل رابط كلاس ++C و قابلاستفاده در سيستمعاملهاي ويندوز و لينوكس 32بيتي و 64بيتي است.
OpenGL Multipipe SDK
OpenGL Multipipe SDK يك لايه API است كه مديريت برنامههاي گرافيكي را در زير سيستمها و ساختارهاي گرافيكي چندگانه آسان ميكند. برنامههاي كاربردي نوشته شده برپايه اين API به نرمي و رواني، هم روي سيستمهاي روميزي تك پردازندهاي و هم روي سيستمهاي چند پردازندهاي با سيستمهاي گرافيكي قدرتمند اجرا ميشوند.
نتيجهگيري
همانگونه كه بيان شد ارتباط بين برنامهها و سختافزاري كه آنرا اجرا ميكند برعهده API است. سازندگان بزرگ نرمافزار و سختافزار API خاصي را براي برنامههاي مالتيمديا آماده كردهاند كه مطرح ترين آنها DirectX و OpenGL هستند.
DirectX10 وWindows Graphic Foundation 2.0 اسامي هستند كه ميتوانند انقلاب جديدي را در گرافيك هاي سه بعدي و بازي هاي پيشرفته كامپيوتري نويد دهند. هنگام عرضه Windows Vista در ابتداي سال جاري ميلادي ما شاهد حضور API جديد شركت Microsoft يعني DirectX 10 بوديم كه استانداردهاي موجود براي پردازش سه بعدي و تجربه چند رسانه اي كاربران را به سطح جديدي ارتقأ داده است.هرچند زمان زيادي از معرفي DirectX 10 مي گذرد، اما ناگفته هاي زيادي در رابطه با اين API بنيادي وجود دارد كه در اين مقاله به بررسي آنها پرداخته شده است.
API يا واسط نرم افزاري DirectX از مجموعه اي از اينترفيس ها تشكيل شده است كه مشخص ميكنند توسع
دهندگان بازي ها و نرم افزارهاي مختلف چگونه بايد با سخت افزار به صحبت بپردازند. نوشتن يك برنامه براي يك API استاندارد بسيار ساده تر از نوشتن و بهينه سازي همان برنامه براي اجرا بر روي سخت افزارهاي خاص است. به منظور هرچه يكپارچه تر كردن سخت افزار و نرم افزار، مايكروسافت يك بازنگري كلي را بر روي DirectX اعمال كرده است. از آنجايي كه اين API در طول زمان حياط Windows Vista به عنوان پايه و اساس توسعه و اجراي هر نرم افزار و يا سخت افزار جديدي مورد استفاده قرار خواهد گرفت، Microsoft سعي كرده است با ارايه برخي از مشخصات پيشرو و كاملا جديد و علاوه بر آن ساده سازي اين API به برنامه نويسان امكان دهد تا با سرعت و سهولت بتوانند با دريافت حداكثر كارايي از سخت افزارهاي PC ،نرم افزارها و بازي هايي با كيفيت و كارايي بالا را طراحي كنند.
Direct3D قسمتي از DirectX است كه مستقيما بر اجرا و عملكردهاي نرم افزارهاي سه بعدي نظارت دارد. در حقيقت مهمترين بخش DirectX ، Direct3D است. بزرگترين تحولات صورت گرفته در DirectX10 نيز مستقيما به Direct3D مربوط مي شود. Direct3D10 با يكپارچه كردن دستورالعمل ها و استاندارد نمودن مشخصات سايه زن هاي قابل برنامه نويسي، برنامه نويسان را از شر سايه زن هايي كه هر سازنده به صورت اختصاصي طراحي و روانه بازار ميكرد رها ميسازد. بعلاوه مايكروسافت در مدل درايورهاي مربوط به كارت هاي گرافيك و نمايشگرها نيز تجديد نظر كرده است.
به اين خاطر كه در Windows Vista تمام دسك تاپ به صورت سه بعدي به نمايش در مي آيد، كارت گرافيك ديگر تنها براي بازي كردن مورد استفاده قرار نمي گيرد. هنگامي كه شما يك صفحه نمايش سه بعدي داريد و هر برنامه را در صفحه سه بعدي مربوط به خودش اجرا مي كنيد، درايورها كارت گرافيك بايد به اندازه كافي با ثبات و انعطاف پذير باشد تا بتواند نقش پردازنده گرافيكي را افزايش دهد. به همين منظور مايكروسافت تصميم گرفته است تا درايورها را به دو بخش مجزا تقسيم نمايد. يك بخش براي اجراي دسك تاپ و بخش ديگر براي اجراي نرم افزارها و بازي هاي سه بعدي. اين تقسيم بندي براي افزايش ثبات زير سيستم گرافيكي طراحي شده است و به سيستم عامل امكان ميدهد حتي در صورتي كه يك برنامه كاربردي و يا بازي سه بعدي به علت خطاهاي نرم افزاري و يا سخت افزاري متوقف ميشود، همچنان و با وجود يك دسك تاپ كاملا سه بعدي قابل استفاده و با ثبات باقي بماند. وجود چنين نوآوري هايي همچنين به اين معني است كه مايكروسافت DirectX10 را براي Windows XP ارايه نخواهد كرد، به خاطر اينكه بسياري از پيشرفت هاي صورت گرفته در Direct3D10 مستقيما به مشخصات مدل جديد درايور كارت گرافيك Windows Vista نياز خواهد داشت.
استفاده وسيع تر از توانايي هاي كارت گرافيكي براي اجراي كاربردهاي مختلف، نياز به اختصاص منابع سيستمي بيشتر از سوي سيستم عامل به آن را دارد. سيستم عامل بايد به كاربردها امكان دهد تا بتوانند سخت افزار را به نحو موثرتري به اشتراك بگذارند. بزرگترين تغيير در اين زمينه در Windows Vista تكنولوژيي است كه با نام Virtualized Memory و يا حافظه مجازي شناخته مي شود. از اين پس كارت گرافيك فضاي حافظه اختصاصي خود را در حافظه سيستم خواهد داشت. اين حافظه اختصاصي ميتواند براي ذخيره داده هايي كه داراي اندازه بزرگتر از حافظه محلي كارت گرافيك هستند مورد استفاده قرار گيرد. هم اكنون كارت هاي گرافيكي گران قيمت و سطح بالا معمولا با حافظه هايي به ميزان 256 يا 512 مگابايت عرضه ميشوند. اما بازي ها ميتوانند به سادگي تمامي حافظه موجود را براي ذخيره قطعات بسيار بزرگ داده، مانند بافت هاي با وضوح بسيار بالا، مورد استفاده قرار دهند.
مدير عامل شركت Epic Games كه به تازگي موتور بسيار قدرتمند Unreal Engine 3.0 را معرفي كرده و در حال توسعه عناوين معروفي چون UT2007 و Gears Of War ميباشد، در اين باره ميگويد:
«تكنولوژي هايي مانند بافت گذاري مجازي (Virtual Texturing) ميتواند گلوگاه هاي مرتبط با اندازه بافت ها را در حافظه هاي گرافيكي بر طرف نمايد. اندازه بافت هايي را كه ما در DirectX9.0 ميتوانستيم با حفظ كارايي كامل استفاده كنيم به وسيله حجم حافظه محلي كارت گرافيكي محدود شده بود، اما در DirectX10 حجم آنها تنها توسط اندازه حافظه سيستم محدود خواهد شد. او توضيح ميدهد كه با در اختيار داشتن چنين امكاناتي، سطح استفاده از بافت ها در بازي ها و نرم افزارهاي سه بعدي بين 2 تا 4 برابر افزايش خواهد يافت كه اين براي كساني كه از موتور Unreal Engine 3.0 براي توسعه بازي هاي خود استفاده ميكنند بسيار عالي است. هرجا كه طراح بخواهد ميتواند از بافت هايي با كيفيت و وضوح بالا، براي مثال در وضوح 2048x2048 پيكسل، استفاده كند و سپس آنها را براي اجرا بر روي سيستم هاي با قدرت پايين تر به اندازه هاي كوچكتري مقياس دهي كند.»
كارت هاي گرافيكي براي تطابق با استدانداردهاي DirectX 10 و افزايش كارايي نياز به رعايت نكات دقيقي دارند. كارت هاي گرافيك بايد داراي مجموعه كاملي از مشخصات باشند تا بتوانند تاييديه هاي DirectX 10 را بدست آورند. البته اين استاندارها به طور كامل با آنچه كه در نسل فعلي كارت هاي گرافيكي شاهد ان هستيم متفاوت نخواهند بود. براي مثال كارت هايي كه از DirectX 9.0c و يا سايه زن هاي نسخه 2 پشتيباني كنند ميتوانند از بسياري از توابع موجود در DirectX 10 نيز پشتيباني كنند. اما Microsoft مشخصه هاي كاملا دقيقي را اعلام كرده است تا سازندگان مختلف پردازنده هاي گرافيكي مجبور به ساخت سخت افزارهاي سازگار با يكديگر شوند. براي مثال تفاوت هاي موجود در واحد هاي مميز شناور پردازنده هاي گرافيكي مختلف شركت هاي ATI و nVIDIA توسعه دهندگان بازي را براي سازگار كردن موتور بازي با هر دو نوع پردازنده گرافيكي تحت فشار قرار ميداد، اما مشخصه هاي تعريف شده در DirectX 10 كمك بزرگي به حذف اينگونه ناسازگاري ها در سخت افزارهاي مختلف و در نتيجه كاهش هزينه و زمان توسعه نرم افزار براي كار با آنها خواهد كرد.
با تشکر ازp30world
_________________ خدایا من در کلبه تنهایی خویش چیزی دارم که تو در بارگاه کبریایی خود نداری که من چون تويی دارم و تو چون خودی نداری . . . !
تاريخ عضويت: جمعه 29 دي 1385 تعداد ارسالها: 261 محل سكونت: پشت کامپیوترم
3 شنبه 4 فروردين 1388 - 01:09
من متن رو کامل نخوندم ولی این ویژگی (پاراگراف قبل از آخرین پاراگراف) محدود به دایرکت 10 نیستش. و از همون زمان قدیم وجود داشته حتا سر این مساله یه مورد به نام الویت گذاری بافت برای خروج از حافظه هستش. این مورد حداقل توی OpenGL از core 1.2 به بعد بوده.
اما در مورد ویندوز ویستا و دایرکت 10: این مسله مربوط به ساختار شی محتوا هستش و نه سیستم عامل یعنی اگر یه بازی کرش کنه فقط کافیه شی محتوای اون نابود بشه.
در مورد OpenGL: این API هنوز هم در صنعت و موارد نظامی کاربرد فراوانی داره همینطور در سیستم عاملهای مختلف هم استفاده میشه مثلا در KDE میتونه به عنوان رابط gui عمل کنه که ویندوز رو جلوی kde سوسک میکنه از اینا بگزریم برای ساخت بازی هم استفاده میشه که ریلیز 3 اون تفاوتهای عمده ای رو برای پشتیبانی از بازی سازی کرده. این رابط بر خلاف دایرکت نرم افزاری نیست و از ویرایش 1.2 اون به بعد به صورت سخت افزاری منتشر شده. که اصطلاحا میگن تحت الحاقیهای سخت افزاری در حال گسترش هستش. بزرگترین عاملی که باعث ریلیز ویرایش دوم اون شدش پشتیبانی از GLSL و همگام کردن اون با API بوده که قابلیت انعطاف پذیری بی نظیری رو بهش داده. OpenGL به عنوان یک استاندارد صنعتی در ایالات متحده شناخته میشه و از OpenGL ES در موراد نظامی و یا هواپیماهای بوئینگ و همینطور در دستگاهای موبایل جدید apple و برخی دیگر از تولید کنندگتن بزرگ دنیا استفاده میشه. انتظار میره که در آینده نزدیک اکثر بازیهای موبایل تحت OpenGL ES منتشر بشن.
هر چند در سالهای 2002 تا 2004 OpenGL از MS DirectX عقب موند اما در 2004 بورد ARB با شروع ریلیز 2 اون به گامهای واقعا بزرگی رو به جلو برداشت هم اکنون OpenGL تنها API هست که میتونه از شیدر مدل 5 پشتیبانی کنه و یکسری از امکاناتی رو نظیر instant drawing ارانه میده که هنوز دایرکت نمی تونه اونها رو به صورت داتی پشتیبانی کنه. دایرکت بیشتر به منظور طراحی بازها طراحی شده بنابراین برای طراحی بازی به نظر من گزینه بهتری نسبت به OpenGL هستش (چون زمان و هزینه کمتری رو برای طراحی باید بپردازید) اما برای طراحی صنعتی بدترین گزینه به شمار میره. همینطور OpenGL برای تست و آزمایش الگوریتمهای گرافیکی به مراتب بهتر از دایرکت هستش.
در مورد مجله شبکه. این مجله پر و اما پر از اشتباه در زمینه گرافیک هستش. من یکسری یکی از شماره های اون رو که مربوط به بازی و ... بود رو خوندم و دیدم از هر مقاله میشه حداقل سه، چهار تا ایراد اساسی بیرون کشید.
تاريخ عضويت: 1 شنبه 9 مرداد 1384 تعداد ارسالها: 28 محل سكونت: تهران
جمعه 1 آبان 1388 - 06:05
دوستان كسي هست كه بتونه يه متن جامع در مورد چرخش sprite ها در
#Managed DirectX C بده یعنی مفهوم World ، View و ... و فرق هاشون با هم و اینکه اصلا"
چرخش یک sprite به چه صورت هست و چرا وقتی یک sprite رو می چرخونیم View هم عوض
میشه و اینکه طریقه استاندارد استفاده از ماتریسهای Transform چی هست؟
تاريخ عضويت: 4 شنبه 24 تير 1383 تعداد ارسالها: 392 محل سكونت: تهران
1 شنبه 30 آبان 1389 - 00:19
وقتي كه DirectX SDK را نصب می کنید باید Refrence مربوط به فایلهای Managed DirectX را به پروژتون اضافه کنید. بعد از اون می تونید تو بخش Using ها اونها رو اضافه کنید.
_________________ First they ignore you;then they laugh at you ;then they fight you ;then you win
تاريخ عضويت: 4 شنبه 24 تير 1383 تعداد ارسالها: 392 محل سكونت: تهران
2 شنبه 1 آذر 1389 - 14:43
يعني چي خاليه؟!!! بيشتر توضيح بده
پيشنهاد مي كنم بي خيال Managed DirectX بشی. مایکروسافت بعد از نسخ 1.1 دیگه اونو توسعه نداد و الان تقریبا شش سالی هست که دیگه پشتیبانی نمی کنه و به جای اون XNA را در اختیار برنامه نویسای دات نت گذاشته. اگه می خوای Managed کار کنی پیشنهاد می کنم که از XNA استفاده کنی
یه چیز دیگه اینکه اون موقع که من از Managed DX استفاده می کردم یه مشکلی وجود داشت اونم این بود که dll های MDX بصورت GAC نصب نمیشد و هر بار باید برای اضافه کردن رفرنس های اون Browse می کردیم و اونا رو انتخاب میکردیم. این اتفاق توی VS2003 میفتاد نمیدونم الانم این مشکل وجود داره یا نه. شاید مشکل شما هم همین باشه.
_________________ First they ignore you;then they laugh at you ;then they fight you ;then you win