سه شنبه, ۱۸ دی, ۱۴۰۳ / 7 January, 2025
مجله ویستا

آشنایی با DirectX و OpenGL


آشنایی با DirectX و OpenGL

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

یک بازی کامپیوتری را روی کامپیوترتان اجرا می‌کنید. فعلا‌ً کارت گرافیک شما روی اسلا‌ت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 بدون این‌که برای نوع خاصی از قطعه سخت‌افزاری نوشته شده باشد، از ویژگی‌های بخش‌های خاص آن قطعه سخت‌افزاری بهره‌ببرد. در شکل یک چگونگی ارتباط لا‌یه HAL با سخت‌افزار و نرم‌افزارهای مرتبط نشان داده شده است.

همان‌گونه که در شکل یک، نشان داده شده، نرم‌افزار بازی بالا‌ترین سطح است و پس از آن کامپوننت‌های ترسیم دوبعدی و سه بعدی، یعنی 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 به صورت گسترده در ضبط صدا و فیلم، و ویرایش آن‌ها به کار می‌رود.

برنامه‌های کاربردی 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 و ... قرار دارد.


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