چهارشنبه, ۲ خرداد, ۱۴۰۳ / 22 May, 2024
مجله ویستا

آشنایی با DirectX و OpenGL


آشنایی با DirectX و OpenGL

یك بازی كامپیوتری را روی كامپیوترتان اجرا می كنید فعلا ً كارت گرافیك شما روی اسلا تAGP سوار می شود, پردازشگر سلرون دارید و پس از چند ماه یا چند سال كامپیوتر جدیدی می خرید اكنون اسلا ت كارت گرافیكی شما PCI Express است و یك پردازشگر ۶۴ بیتی دارید

یك بازی كامپیوتری را روی كامپیوترتان اجرا می‌كنید. فعلا‌ً كارت گرافیك شما روی اسلا‌تAGP سوار می‌شود، پردازشگر سلرون دارید و ... پس از چند ماه یا چند سال كامپیوتر جدیدی می‌خرید. اكنون اسلا‌ت كارت گرافیكی شما PCI Express است و یك پردازشگر ۶۴ بیتی دارید. همان بازی را روی این كامپیوتر هم نصب و اجرامی‌كنید! شاید به نظر طبیعی میآید كه همه چیز باید همین‌طور باشد. اما چگونه یك بازی روی كامپیوترهایی با تراشه‌ها و سخت‌افزارهای مختلف و گاه فناوری متفاوت اجرا می‌شود؟ API‌های گرافیكی یا همان رابط‌های برنامه‌نویسی، بخش بزرگی از این مشكل را حل می‌كنند و امكانات گسترده دیگری را نیز در اختیار برنامه‌نویسان و توسعه‌دهندگان بازی و برنامه‌های چندرسانه‌ای قرارمی‌دهند. OpenGL وDirectX، دو مجموعه API گرافیكی و صوتی هستند كه برای آسان‌تر ساختن توسعه بازی‌ها و نرم‌افزارهای چندرسانه‌ای طراحی شده‌اند.

●API گرافیكی چیست؟

API درواقع بین برنامه و سخت‌افزاری كه برنامه روی آن اجرا می‌شود، نقش یك هماهنگ‌كننده را دارد و مانند پلی میان سخت‌افزار و نرم‌افزار ارتباط ایجاد‌می‌كند. یعنی برنامه‌نویس كدهایی می‌نویسد كه داده‌های گرافیكی خود را به وسیله دستورهای استانداردی به درایور API می‌فرستد نه مستقیماً به خود سخت‌افزار. سپس درایوری كه شركت سازنده سخت‌افزار تولید‌كرده است، این كداستاندارد تولیدشده را به فرمت بومی و ویژه‌ای كه برای آن مدل خاص سخت‌افزار قابل شناسایی است، ترجمه می‌كند.

●Microsoft DirectX

شركت مایكروسافت در سال ۱۹۹۵ DirectX را ساخته و توسعه داده‌است. این نرم‌افزار شامل مجموعه‌ یكپارچه‌ای از ابزارهای برنامه‌نویسی است كه به توسعه‌دهندگان امكان می‌دهد انواع مختلف نرم‌افزارهای مالتی‌مدیا را روی پلتفرم ویندوز تولید كنند. DirectX به برنامه‌ای كه بر پایه آن طراحی شده امكان می‌دهد به آسانی قابلیت‌های سخت‌افزار كامپیوتر را شناسایی كند و پارامترهای برنامه را با آن هماهنگ سازد.

DirectX شامل APIهایی است كه دسترسی به بخش‌های ویژه‌ای از سخت‌افزار مانند تراشه‌های شتاب‌دهنده گرافیك سه‌بعدی و كارت صوتی را میسرمی‌كند. این APIها كنترل توابع سطح پایین، یعنی نزدیك به سخت‌افزار، شامل شتاب‌دهنده گرافیكی دو بعدی، پشتیبانی از دستگاه‌های ورودی مانند دسته بازی، صفحه‌كلید و ماوس، و كنترل میكس و خروجی صدا را انجام می‌دهند.

DirectX ۷.۰ در سال ۱۹۹۹ با شش كامپوننت عرضه شد كه عبارت بودند از: Direct۳D،DirectDraw ،DirectSound ،DirectPlay ،DirectInput و DirectMusic.

در اواخر سال ۲۰۰۰ میلا‌دی، DirectX ۸.۰ عرضه شد كه در آن كامپوننت‌های DirectSound و DirectMusic با هم ادغام شدند و با نام كامپوننت Direct Audio معرفی شدند.

Direct۳D و DirectDraw نیز با هم ادغام شدند و یك كامپوننت با نام DirectX Graphics را ساختند. DirectShow نیز به صورت یك API جداگانه پیاده‌سازی شد و به یكی از كامپوننت‌های DirectX تبدیل گردید.

DirectX ۹.۰ در ژانویه سال ۲۰۰۳ عرضه شد. ویژگی‌های خاص این نسخه عبارتند از:

▪قابلیت‌های صوتی جدید در DirectSound

▪سخت‌افزار رندركننده ویدیویی با شتاب بیشتر

▪بهبود قابلیت برنامه‌ریزی گرافیكی

APIهای همه كامپوننت‌های DirectX برپایه COM یا Component Object Model هستند. در ادامه به بررسی هفت كامپوننت DirectX ۹.۰ می‌پردازیم كه عبارتند از: DirectDraw ،Direct۳D ،DirectShow ،DirectSound ،DirectMusic ،DirectInput و DirectPlay.

۱- DirectDraw

DirectDraw، كامپوننتی ویژه طراحی دوبعدی است كه به برنامه‌نویس اجازه می‌دهد مستقیماً به حافظه كارت گرافیك دسترسی یابد، صحنه‌ها و فریم‌ها را با هم تركیب نماید یا bitmapها را در آنجا ذخیره كند. همچنین، برای برنامه‌ها امكان دسترسی به سخت‌افزارهای ویژه نمایش را مستقل از نوع سخت‌افزار فراهم می‌كند.

هر برنامه كاربردی DirectDraw الگوی یكسانی دارد كه عبارت است از:

▪ایجاد یك شی

▪ شروع حلقه

▪ انتقال به مانتیور

▪پایان حلقه

▪پاك كردن آن شی‌

منظور از واژه <یك شی> می‌تواند هر تصویر دوبعدی‌ای باشد و منظور از حلقه، حلقه‌ای است كه در برنامه‌نویسی هنگام تكرار منظم دسته‌ای از داده‌ها یا دستورها به كار می‌بریم. تصویر ایجاد‌شده پس از مدتی پاك می‌شود و جای خود را به تصویر دیگری می‌دهد.

۲- Direct۳D

این كامپوننت، دسترسی به توابع رندركننده گرافیك سه‌بعدی تعبیه شده در بیشتر كارت‌های گرافیك را فراهم می‌كند. Direct۳D یك API سطح پایین سه‌بعدی است كه به نرم‌افزار امكان می‌دهد مستقل از سخت‌افزار، با سخت‌افزار شتاب‌دهنده ارتباط برقرار كند. لا‌یه‌ای كه برای توسعه‌دهندگان بازی و گرافیك كامپیوتری امكان طراحی و ساخت بازی‌ها را مستقل از سخت‌افزار كامپیوترها فراهم می‌كند، لا‌یه‌ای به نامHardware Abstraction Layer) HAL) است.

HAL با قابلیت‌هایی كه به صورت گسترده در سخت‌افزارهای گرافیك سه‌بعدی پیاده‌سازی شده‌اند ارتباط ایجاد می‌كند و به سازندگان امكان‌می‌دهد درایورهایی را تولید كنند كه لا‌یه HAL را به سخت‌افزار پیوند دهد. این كار باعث می‌شود برنامه‌های كاربردی Direct ۳D بدون این‌كه برای نوع خاصی از قطعه سخت‌افزاری نوشته شده باشد، از ویژگی‌های بخش‌های خاص آن قطعه سخت‌افزاری بهره‌ببرد.

نرم‌افزار بازی بالا‌ترین سطح است و پس از آن كامپوننت‌های ترسیم دوبعدی و سه بعدی، یعنی DirectDraw و Direct۳D قرار دارند. لا‌یه HAL یك رابط میان كامپوننت‌های DirectX و كارت گرافیك است.

در سیستم رندر Direct۳D، ساختار اشیای سه‌بعدی پیش از آن‌كه شتاب‌دهنده سه‌بعدی، یك صحنه سه‌بعدی را رندر نماید و آن را به مانیتور منتقل كند، به وسیله CPU پردازش می‌شود.نسخه ششم كامپوننت Direct۳D از قابلیت‌های كارت‌های گرافیك جدیدتر پشتیبانی می‌نماید و در هر گذر، چندین بافت را با هم رندر می‌كند.

كاهش زمان رندر به استفاده از نقشه بافت‌ها نیاز دارد. این نسخه تكنیك‌هایی برای افزودن جلوه‌ای واقعی‌تر به صحنه‌های سه بعدی را نیز دربردارد.

مانند anistropic filtering كه عنصر عمق را به trilinear filtering و نقشه برجسته‌سازی می‌افزاید كه موجب ایجاد شباهت بیشتر بافت‌ها و نیز منابع نور تابیده شده بر سطوح مسطح با نمونه‌های واقعی آن‌ها می‌شود.

نسخه هفتم DirectX نسبت به نسخه‌های پیش از خود بیست درصد سریع‌تر و شامل چند ویژگی دیگر بود. مهم‌ترین آن‌ها پشتیبانی از تغییرات شتاب سخت‌افزاری و نوردهی (T&L) به وسیله اغلب كارت‌های گرافیك سه‌بعدی آن‌زمان به ویژه كارت‌هایی است كه برپایه تراشه‌های nVidia Geforce ۲۵۶ و S۳ Savage ۲۰۰۰ ساخته شده‌اند. از زمانی كه T&L عرضه شد، وقت‌گیرترین وظیفه CPU هنگام اجرای بازی‌های پیشرفته به شتاب‌دهنده سه‌بعدی داده شد و بخش بزرگی از ظرفیت پردازنده اصلی به كارهای دیگر مانند هوش‌مصنوعی بازی اختصاص داده شد و توسعه‌دهندگان بازی توانستند رندر را با جزئیات بیشتر انجام دهند و جلوه‌های ویژه پیچیده‌تری را در بازی‌ها به‌كار ببرند.

۳- DirectShow

این كامپوننت از بسیاری از فرمت‌های صوتی و ویدیویی شامل AVI ،MPEG ،ASF ،WMA/WMV ،DV و MP۳ و DirectX پشتیبانی می‌كند و روی ویندوزهای ۹۸، ۲۰۰۰، اكس‌پی و نرم‌افزار اینترنت اكسپلورر عرضه شده است.DirectShow پروسه كارهای مالتی‌مدیا مانند نمایش فایل ویدیویی را به مجموعه‌ای از مراحل كه با نامfilter شناخته می‌شوند تقسیم می‌كند.

فیلترها تعدادی pin ورودی و خروجی دارند كه آن‌ها را به هم متصل می‌كند. طراحی كلی سازوكار اتصال به این صورت است كه فیلترها می‌توانند به روش‌های مختلف به هم متصل شوند كه هر نوع از این اتصال‌ها به معنی انجام دادن یك كار است و توسعه‌دهندگان نرم‌افزار می‌توانند افكت‌های خود یا فیلترهای دیگری را به بخشی از این گراف برای انجام كار ویژه‌ای بیفزایند. گراف فیلتر DirectShow به صورت گسترده در ضبط صدا و فیلم، و ویرایش آن‌ها به كار می‌رود.

در شكل دو، یك گراف نمایش برای فایل فیلمی از نوع MPEG نشان داده شده است. برنامه‌های كاربردی DirectShow، برای پردازش داده‌های مالتی‌مدیا، از این گراف استفاده می‌كنند.

داده‌های چند رسانه‌ای در این گراف (در حالی كه كارها به وسیله برنامه كاربردی كنترل می‌شوند) از فایل منبع به سمت مقصد كه می‌تواند یك قطعه سخت‌افزاری باشد حركت می‌كنند.

ولی در برخی مواقع، برنامه كاربردی علا‌وه بر كنترل گراف، دریافت‌كننده یا فرستنده داده نیز هست.

هر گره این گراف، همانگونه كه گفته شد، یك فیلتر است و كار ویژه خود را انجام می‌دهد. فیلتر source، داده‌ها را از یك فایل یا URL می‌خواند. فیلتر Parser، بخش‌هایی از داده‌های صوتی و ویدیویی را به رمزگشای مناسب می‌فرستد. رمزگشاها، داده‌های صوتی و ویدیویی را رمزگشایی می‌نمایند یا از حالت فشردگی خارج می‌كنند.

فیلتر رندركننده، داده‌های دریافت شده صوتی و ویدیویی از رمزگشا را پخش می‌كند یا آن‌ها را نمایش می‌دهد.

۴- DirectSound

این كامپوننت همزمان با ساخت ویندوز ۹۵، زمانی كه درایورهای صوتی از نوع VXD بودند به DirectX افزوده شد. در این كامپوننت APIهای ویژه‌ای ایجاد شد كه نویسندگان درایورهای صوتی می‌بایست آن‌ها را به محصولا‌ت خود، كه فرمت VXD داشت، می‌افزودند تا به درستی با DirectSound كار كند.

برنامه‌های چندرسانه‌ای با این كامپوننت به سخت‌افزارهای صوتی مانند كارت صوتی دسترسی پیدامی‌كنند. از مهم‌ترین ویژگی‌های این API، تركیب صدا و كنترل سطح آن است.

DirectSound همچنین اجازه می‌دهد چندین برنامه كاربردی، بدون پیش آوردن وقفه، همزمان به كارت صوتی دسترسی داشته باشند. ایجاد افكت‌های صوتی از دیگر توانایی‌های DirectSound است. پس از سال‌ها توسعه، اكنون DirectSound یك API پخته و كامل است و بسیاری قابلیت‌های دیگر را نیز فراهم می‌كند؛ مانند قابلیت پخش صداهای چند كاناله با وضوح و دقت بالا‌.

۵- DirectMusic

تاكنون بازی‌هایی را تجربه كرده‌اید كه در تمام مدت یك مرحله، موسیقی یكنواخت و ثابتی دارند؟ بازی‌ای را در نظر بگیرید كه برنامه‌نویسان آن می‌خواهند یك آهنگ، در تمام مدت، در یك مرحله از آن به صدا دربیاید. با استفاده از برنامه DirectMusic Producer، آن‌ها می‌توانند در آن مرحله برای آهنگ، یك درجه در نظر بگیرند.

این درجه می‌تواند بسته به نوع عملكرد شخصیت بازی، تغییر كند. اگر شخصیت بازی در حال راه رفتن است، آهنگ آرام و هنگامی كه با دشمن خود مبارزه می‌كند، آهنگ تندتر می‌شود و یا نوع آهنگ تغییر می‌كند و هنگامی كه مبارزه تمام می‌شود، آهنگ دوباره آرام می‌شود. این تغییرها بدون ایجاد وقفه، به صورت پویا و بدون دخالت كاربر انجام می‌شود. چون براساس DirecMusic، آهنگ به صورت شناور و بدون وقفه با نواختن واریاسیون‌های مختلف با قابلیت واكنش به رویدادهای بازی تولید می‌شود.

DirectMusic، با داده‌های موسیقی براساس پیام‌های حاوی اطلا‌عات كار می‌كند. یك آهنگ می‌تواند در داخل سخت‌افزار و با نرم‌افزارهای آهنگ‌ساز مانند Microsoft ‌Synthesizer ساخته شود. DirectMusic از استانداردهایMIDI و DLS پشتیبانی می‌كند.

۶- DirectInput

این كامپوننت، سازوكار مشتركی را برای دسترسی به بسیاری از كنترل‌كننده‌های بازی مانند دسته بازی، گیم‌پد، صفحه كلید و ماوس فراهم می‌آورد. مهم‌ترین تغییری كه هنگام عرضه DirectX۸ در DirectInput ایجاد شد، آمدنaction map بود. action map از توابعی مانند راندن یك وسیله یا شلیك یك گلوله (كه به‌وسیله دستگاه‌های ورودی ایجاد می‌شود) استفاده می‌كند. زمانی كه یك سخت‌افزار ورودی مانند دسته بازی را می‌خرید، معمولا ‌ًaction mapنیز برای بسیاری از انواع رایج بازی‌ها مانند شبیه‌ساز پرواز، تیراندازی اول شخص و بازی‌های مسابقه‌ای در آن پیاده‌سازی شده است.

۷- DirectPlay

این كامپوننت امكان بازی چند نفر را در بازی‌های چندنفره فراهم می‌آورد، دسترسی به سرویس‌های ارتباطی را آسان می‌سازد و راهی را برای بازی‌ها فراهم می‌كند تا مستقل ازپروتكل یا نوع سرویس آنلا‌ین با یكدیگر در ارتباط باشند. همچنین از پروتكل‌های ارتباطی مطمئن پشتیبانی‌می‌كند تا مانع از گم شدن داده‌های مهم بازی روی شبكه شود. در واقع DirectPlay به صورت لا‌یه‌ای است كه روی پروتكل‌های معمول شبكه مانند IPX ،TCP/IP و ... قرار دارد.

در واقع یك session یا جلسه در DirectPlay یك كانال ارتباطی بین چندین كامپیوتر است. یك برنامه كاربردی پیش از آن‌كه بتواند با سیستم‌های دیگر ارتباط برقرار كند، باید در یك Session یا جلسه باشد. هر جلسه تنها یك میزبان دارد و آن برنامه كاربردی‌ای است كه آن جلسه را ایجاد كرده‌است. تنها میزبان می‌تواند ویژگی‌های یك Session را تغییر دهد.

ترجمه و تدوین: علی حسینی‌


شما در حال مطالعه صفحه 1 از یک مقاله 2 صفحه ای هستید. لطفا صفحات دیگر این مقاله را نیز مطالعه فرمایید.