Admin
2nd February 2009, 07:25 PM
آشنایی با DirectX و OpenGL
یک بازی کامپیوتری را روی کامپیوترتان اجرا میکنید. فعلاً کارت گرافیک شما روی اسلاتAGP سوار میشود، پردازشگر سلرون دارید و … پس از چند ماه یا چند سال کامپیوتر جدیدی میخرید. اکنون اسلات کارت گرافیکی شما PCI Express است و یک پردازشگر ۶۴ بیتی دارید. همان بازی را روی این کامپیوتر هم نصب و اجرامیکنید! شاید به نظر طبیعی میآید که همه چیز باید همینطور باشد. اما چگونه یک بازی روی کامپیوترهایی با تراشهها و سختافزارهای مختلف و گاه فناوری متفاوت اجرا میشود؟ APIهای گرافیکی یا همان رابطهای برنامهنویسی، بخش بزرگی از این مشکل را حل میکنند و امکانات گسترده دیگری را نیز در اختیار برنامهنویسان و توسعهدهندگان بازی و برنامههای چندرسانهای قرارمیدهند. OpenGL وDirectX، دو مجموعه API گرافیکی و صوتی هستند که برای آسانتر ساختن توسعه بازیها و نرمافزارهای چندرسانهای طراحی شدهاند.
http://www.shabakeh-mag.com/Data/1002395_b.jpg
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 با سختافزار و نرمافزارهای مرتبط نشان داده شده است.
http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_1_s.jpg
شکل ۱ - چگونگی ارتباط لایه 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 به صورت گسترده در ضبط صدا و فیلم، و ویرایش آنها به کار میرود.
http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_2_s.jpg
شکل ۲ - یک گراف فیلتر که کار نمایش یک فایل MPEG را نشان میدهد.
در شکل دو، یک گراف نمایش برای فایل فیلمی از نوع 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 را تغییر دهد.
DirectX ۹.۰
این کامپوننت، آخرین نسخه DirectX تا پیش از عرضه رسمی ویندوز ویستا است. مهمترین چیزی که همراه DirectX ۹.۰ عرضه شد، High-Level Shader Language) HLSL) است. زبان HLSL جایگزین زبان اسمبلی برای نوشتن pixel shaderها و vertex shaderها در DirectX است. پیش از ارایه DirectX ۹.۰ توسعهدهندگان بازی بایدshaderها را با استفاده از یک زبان اسمبلی سطح پایین توسعه میدادند. HLSL با فراهمآوردن یک محیط برنامهنویسی توسعهدهنده ساده، توسعه همه بخشهای نرمافزار مانند انیمیشن و برنامهنویسی افکتها را آسان میکند.
HLSL با همه پردازشگرهای گرافیکی (GPU) سازگار با DirectX کار میکند و به توسعهدهندگان امکان میدهد افکتهای بصری را روی گستره وسیعتری از پلتفرمها ایجاد کنند؛ بدون اینکه نیاز داشته باشند به جزییات سختافزار گرافیکی توجه کنند.
DirectX ۹.۰ روی ویندوز ۹۵ نصب نمیشود. چون بازیهایی که به DirectX ۹.۰ نیاز دارند، به کامپیوترهای جدیدتر و قویتری هم نیاز دارند که ویندوز ۹۸ یا نسخههای جدیدتر روی آنها نصب میشود. تاکنون نسخههای a ،b و c از DirectX ۹.۰ ارایه شده است. هر نسخه جدیدتر از DirectX دارای امنیت، کارایی و سیستم رفع خطای بهتری است.
DirectX ۱۰
دوستداران بازی باید خوشحال باشند از اینکه بدانند شرکت مایکروسافت DirectX را نیز تولید کرده است و همراه پیش توزیع Direct۳D ۱۰ عرضه خواهد شد. همچنین نرمافزارMicrosoft Windows Game Explorer نیز عرضه شده که به برنامهنویسان و توسعهدهندگان امکان میدهد امکانات بروزکردن خودکار (auto-updating) را به بازیهایشان بیفزایند. مایکروسافت میخواهد DirectX ۹.۰ و DirectX ۱۰ را روی ویندوز ویستا عرضه کند. به گفته Rodolph Balaz از برنامهنویسان توسعهدهنده Direct۳D و OpenGL در مایکروسافت، DirectX ۱۰ تنها با سیستمعاملهای جدید کار خواهد کرد و در حال حاضر مایکروسافت، برنامهای برای پشتیبانی ویندوز اکسپی از آن ندارد.
تا زمان نوشته شدن این مقاله هنوز نسخه رسمی ویندوز ویستا عرضه نشده است. ولی به نظر میآید این ویندوز، هم از DirectX ۱۰ و هم از DirectX ۹.۰ پشتیبانی خواهد کرد.
SGL OpenGL
شرکت سیلیکون گرافیکس(SGI ،OpenGL) را با هدف ساخت یک API برای توسعه برنامههای گرافیکی دوبعدی و سه بعدی عرضهکردهاست. پیش از ساخته شدن APIهای گرافیکی مانند OpenGL و DirectX، بسیاری از تولیدکنندگان سختافزار، کتابخانههای گرافیکی مختلف و متفاوتی داشتند. به همین دلیل پشتیبانی از نسخههای مختلف نرمافزارهایشان روی پلتفرمهای سختافزاری مختلف هزینهبر و انتقال یک برنامه کاربردی از یک پلتفرم سختافزاری به پلتفرم سختافزاری دیگر بسیار وقتگیر و سخت بود.
بنابراین SGI نمونه برنامهای را تولید کرد که تولیدکنندگان سختافزار باید از آن برای توسعه درایورهای OpenGL در سختافزارهایشان استفاده کنند. این برنامه به صورت اپنسورس ارایه شدهاست. ولی سازندگان این سختافزارها میتوانند قابلیتهای گوناگونی را برپایه OpenGL در سختافزارهایشان ایجاد کنند. تصمیمگیری درباره ایجاد تغییرات در OpenGL را کنسرسیوم ARB اتخاذ میکند.
این کنسرسیوم شامل اعضای مهمی همچون اپل، اینتل، آیبیام، سان، ATI، دل، nVIDIA، سیلیکونگرافیکس و۳Dlabs است و از سوی شرکتهای معتبر دیگری مانند متراکس، S۳ ،Xi و Quantum ۳D حمایت میشود. توسعهدهندگان نرمافزار برای استفاده از OpenGL در نرمافزارهایشان نیازی به اخذ مجوز ندارند. ولی تولیدکنندگان سختافزار برای پیادهسازی سختافزاری OpenGL نیازمند اخذ مجوز از SGI هستند.
OpenGL چیست؟
در اوایل پیدایش OpenGL، از این API در کارهای صنعتی، طراحی وسایل داخلی، مکانیکی و نیز در آنالیزهای علمی و آماری استفاده میشد.
در سال ۱۹۹۶، نویسندگان و توسعهدهندگان بازیهای کامپیوتری از نسخه ویندوزی OpenGL برای ساخت بازیهای کامپیوتری استفاده کردند. OpenGL برای پشتیبانی از گستره وسیعی از تکنیکهای رندرکردن گرافیکی پیشرفته طراحی شده است که میتوان پارهای از آنها را به اینصورت نام برد:
نورپردازی: قابلیت تحلیل میزان رنگ هنگام تابش مدلهای متفاوت نور به یک سطح از یک یا چند منبع نور مختلف.
سایهسازی نرم: قابلیت تحلیل افکتهای سایه هنگام تابش نور به یک زاویه و ایجاد اختلاف نور خفیف در مقابل آن سطح (مانند نور کمی که هنگام تابش آفتاب به یک صخره یخی در اطراف آن ایجاد میشود).
حرکت محو ومدلسازی: توانایی تغییر مکان و اندازه پرسپکتیو یک شی در فضای سه بعدی.
مجموعه امکانات OpenGL شبیه Direct۳D است. ولی API سطح پایینتر آن (نزدیکتر به سطح سختافزار) باعث میشود کنترل خوبی روی عناصر اصلی ایجاد صحنههای سه بعدی مانند اطلاعات سهضلعیها که سلولهای تشکیلدهنده یک مدل سه بعدی هستند داشته باشد.
دو سطح پشتیبانی از شتابدهندگی سختافزاری برای OpenGL وجود دارد: installing client driver) ICDs) که به نوردهی ایجاد تغییر و رسترکردن (تبدیل یک فریم سه بعدی چند ضلعی ذخیره شده درframe buffer به یک تصویر کامل با بافتها و نشانههای عمق و نور) شتاب میدهد و mini client server) MCs) که از رسترکردن پشتیبانی میکند.
OpenGL ۱.۴ و OpenGL ۱.۵ بهترتیب در تابستان ۲۰۰۲ و ۲۰۰۳ معرفی شدند که هر یک امکانات و کاربردهای بیشتری از نسخههای پیش از خود داشتند. بزرگترین آنها OpenGL Shading Language بود؛ زبانی ویژه برنامهنویسی vertex-shader و pixel-shader که در صورت نیاز به OpenGL الصاق میشد. OpenGLShading Language زبانی شد که به سرعت در سطح گستردهای مورد پشتیبانی یونیکس، ویندوز، لینوکس و دیگر سیستمعاملها برای توسعهدهنده گرافیکهای تعاملی و برنامههای کاربردی ترسیمی قرار گرفت.
OpenGL ۲.۰
OpenGL ۲.۰ آخرین نسخه عرضه شده تا اوایل سال ۲۰۰۶ میلادی است. 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 ۳.۲ است.
OpenGL Volumizer
OpenGL Volumizer، یک API گرافیکی است که در بخشهای انرژی، تولید، داروسازی و تجارت کاربرد دارد. این API برای انجام کارهای تعاملی با کیفیت بالا و بصری نمودن و شبیهسازی یک محیط با استفاده از مجموعه بزرگی از دادههای حجمی (دادههایی که مختصات یک شی در فضای سه بعدی را نشان میدهند) طراحی شده است. برای نمونه در نرمافزارهای پزشکی برای شبیهسازی وضعیت بخش خاصی از بدن، از این نرمافزار استفاده میشود. OpenGL Volumizer آخرین نسخه این API تا اوایل سال ۲۰۰۶ میلادی است که بر پایه کتابخانه گرافیکی استانداردOpenGL ساخته شده و شامل رابط کلاس ++C و قابلاستفاده در سیستمعاملهای ویندوز و لینوکس ۳۲بیتی و ۶۴بیتی است.
OpenGL Multipipe SDK
OpenGL Multipipe SDK یک لایه API است که مدیریت برنامههای گرافیکی را در زیر سیستمها و ساختارهای گرافیکی چندگانه آسان میکند. برنامههای کاربردی نوشته شده برپایه این API به نرمی و روانی، هم روی سیستمهای رومیزی تک پردازندهای و هم روی سیستمهای چند پردازندهای با سیستمهای گرافیکی قدرتمند اجرا میشوند.
نتیجهگیری
همانگونه که بیان شد ارتباط بین برنامهها و سختافزاری که آنرا اجرا میکند برعهده API است. سازندگان بزرگ نرمافزار و سختافزار API خاصی را برای برنامههای مالتیمدیا آماده کردهاند که مطرح ترین آنها DirectX و OpenGL هستند.
منبع: http://www.shabakeh-mag.com
یک بازی کامپیوتری را روی کامپیوترتان اجرا میکنید. فعلاً کارت گرافیک شما روی اسلاتAGP سوار میشود، پردازشگر سلرون دارید و … پس از چند ماه یا چند سال کامپیوتر جدیدی میخرید. اکنون اسلات کارت گرافیکی شما PCI Express است و یک پردازشگر ۶۴ بیتی دارید. همان بازی را روی این کامپیوتر هم نصب و اجرامیکنید! شاید به نظر طبیعی میآید که همه چیز باید همینطور باشد. اما چگونه یک بازی روی کامپیوترهایی با تراشهها و سختافزارهای مختلف و گاه فناوری متفاوت اجرا میشود؟ APIهای گرافیکی یا همان رابطهای برنامهنویسی، بخش بزرگی از این مشکل را حل میکنند و امکانات گسترده دیگری را نیز در اختیار برنامهنویسان و توسعهدهندگان بازی و برنامههای چندرسانهای قرارمیدهند. OpenGL وDirectX، دو مجموعه API گرافیکی و صوتی هستند که برای آسانتر ساختن توسعه بازیها و نرمافزارهای چندرسانهای طراحی شدهاند.
http://www.shabakeh-mag.com/Data/1002395_b.jpg
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 با سختافزار و نرمافزارهای مرتبط نشان داده شده است.
http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_1_s.jpg
شکل ۱ - چگونگی ارتباط لایه 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 به صورت گسترده در ضبط صدا و فیلم، و ویرایش آنها به کار میرود.
http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_2_s.jpg
شکل ۲ - یک گراف فیلتر که کار نمایش یک فایل MPEG را نشان میدهد.
در شکل دو، یک گراف نمایش برای فایل فیلمی از نوع 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 را تغییر دهد.
DirectX ۹.۰
این کامپوننت، آخرین نسخه DirectX تا پیش از عرضه رسمی ویندوز ویستا است. مهمترین چیزی که همراه DirectX ۹.۰ عرضه شد، High-Level Shader Language) HLSL) است. زبان HLSL جایگزین زبان اسمبلی برای نوشتن pixel shaderها و vertex shaderها در DirectX است. پیش از ارایه DirectX ۹.۰ توسعهدهندگان بازی بایدshaderها را با استفاده از یک زبان اسمبلی سطح پایین توسعه میدادند. HLSL با فراهمآوردن یک محیط برنامهنویسی توسعهدهنده ساده، توسعه همه بخشهای نرمافزار مانند انیمیشن و برنامهنویسی افکتها را آسان میکند.
HLSL با همه پردازشگرهای گرافیکی (GPU) سازگار با DirectX کار میکند و به توسعهدهندگان امکان میدهد افکتهای بصری را روی گستره وسیعتری از پلتفرمها ایجاد کنند؛ بدون اینکه نیاز داشته باشند به جزییات سختافزار گرافیکی توجه کنند.
DirectX ۹.۰ روی ویندوز ۹۵ نصب نمیشود. چون بازیهایی که به DirectX ۹.۰ نیاز دارند، به کامپیوترهای جدیدتر و قویتری هم نیاز دارند که ویندوز ۹۸ یا نسخههای جدیدتر روی آنها نصب میشود. تاکنون نسخههای a ،b و c از DirectX ۹.۰ ارایه شده است. هر نسخه جدیدتر از DirectX دارای امنیت، کارایی و سیستم رفع خطای بهتری است.
DirectX ۱۰
دوستداران بازی باید خوشحال باشند از اینکه بدانند شرکت مایکروسافت DirectX را نیز تولید کرده است و همراه پیش توزیع Direct۳D ۱۰ عرضه خواهد شد. همچنین نرمافزارMicrosoft Windows Game Explorer نیز عرضه شده که به برنامهنویسان و توسعهدهندگان امکان میدهد امکانات بروزکردن خودکار (auto-updating) را به بازیهایشان بیفزایند. مایکروسافت میخواهد DirectX ۹.۰ و DirectX ۱۰ را روی ویندوز ویستا عرضه کند. به گفته Rodolph Balaz از برنامهنویسان توسعهدهنده Direct۳D و OpenGL در مایکروسافت، DirectX ۱۰ تنها با سیستمعاملهای جدید کار خواهد کرد و در حال حاضر مایکروسافت، برنامهای برای پشتیبانی ویندوز اکسپی از آن ندارد.
تا زمان نوشته شدن این مقاله هنوز نسخه رسمی ویندوز ویستا عرضه نشده است. ولی به نظر میآید این ویندوز، هم از DirectX ۱۰ و هم از DirectX ۹.۰ پشتیبانی خواهد کرد.
SGL OpenGL
شرکت سیلیکون گرافیکس(SGI ،OpenGL) را با هدف ساخت یک API برای توسعه برنامههای گرافیکی دوبعدی و سه بعدی عرضهکردهاست. پیش از ساخته شدن APIهای گرافیکی مانند OpenGL و DirectX، بسیاری از تولیدکنندگان سختافزار، کتابخانههای گرافیکی مختلف و متفاوتی داشتند. به همین دلیل پشتیبانی از نسخههای مختلف نرمافزارهایشان روی پلتفرمهای سختافزاری مختلف هزینهبر و انتقال یک برنامه کاربردی از یک پلتفرم سختافزاری به پلتفرم سختافزاری دیگر بسیار وقتگیر و سخت بود.
بنابراین SGI نمونه برنامهای را تولید کرد که تولیدکنندگان سختافزار باید از آن برای توسعه درایورهای OpenGL در سختافزارهایشان استفاده کنند. این برنامه به صورت اپنسورس ارایه شدهاست. ولی سازندگان این سختافزارها میتوانند قابلیتهای گوناگونی را برپایه OpenGL در سختافزارهایشان ایجاد کنند. تصمیمگیری درباره ایجاد تغییرات در OpenGL را کنسرسیوم ARB اتخاذ میکند.
این کنسرسیوم شامل اعضای مهمی همچون اپل، اینتل، آیبیام، سان، ATI، دل، nVIDIA، سیلیکونگرافیکس و۳Dlabs است و از سوی شرکتهای معتبر دیگری مانند متراکس، S۳ ،Xi و Quantum ۳D حمایت میشود. توسعهدهندگان نرمافزار برای استفاده از OpenGL در نرمافزارهایشان نیازی به اخذ مجوز ندارند. ولی تولیدکنندگان سختافزار برای پیادهسازی سختافزاری OpenGL نیازمند اخذ مجوز از SGI هستند.
OpenGL چیست؟
در اوایل پیدایش OpenGL، از این API در کارهای صنعتی، طراحی وسایل داخلی، مکانیکی و نیز در آنالیزهای علمی و آماری استفاده میشد.
در سال ۱۹۹۶، نویسندگان و توسعهدهندگان بازیهای کامپیوتری از نسخه ویندوزی OpenGL برای ساخت بازیهای کامپیوتری استفاده کردند. OpenGL برای پشتیبانی از گستره وسیعی از تکنیکهای رندرکردن گرافیکی پیشرفته طراحی شده است که میتوان پارهای از آنها را به اینصورت نام برد:
نورپردازی: قابلیت تحلیل میزان رنگ هنگام تابش مدلهای متفاوت نور به یک سطح از یک یا چند منبع نور مختلف.
سایهسازی نرم: قابلیت تحلیل افکتهای سایه هنگام تابش نور به یک زاویه و ایجاد اختلاف نور خفیف در مقابل آن سطح (مانند نور کمی که هنگام تابش آفتاب به یک صخره یخی در اطراف آن ایجاد میشود).
حرکت محو ومدلسازی: توانایی تغییر مکان و اندازه پرسپکتیو یک شی در فضای سه بعدی.
مجموعه امکانات OpenGL شبیه Direct۳D است. ولی API سطح پایینتر آن (نزدیکتر به سطح سختافزار) باعث میشود کنترل خوبی روی عناصر اصلی ایجاد صحنههای سه بعدی مانند اطلاعات سهضلعیها که سلولهای تشکیلدهنده یک مدل سه بعدی هستند داشته باشد.
دو سطح پشتیبانی از شتابدهندگی سختافزاری برای OpenGL وجود دارد: installing client driver) ICDs) که به نوردهی ایجاد تغییر و رسترکردن (تبدیل یک فریم سه بعدی چند ضلعی ذخیره شده درframe buffer به یک تصویر کامل با بافتها و نشانههای عمق و نور) شتاب میدهد و mini client server) MCs) که از رسترکردن پشتیبانی میکند.
OpenGL ۱.۴ و OpenGL ۱.۵ بهترتیب در تابستان ۲۰۰۲ و ۲۰۰۳ معرفی شدند که هر یک امکانات و کاربردهای بیشتری از نسخههای پیش از خود داشتند. بزرگترین آنها OpenGL Shading Language بود؛ زبانی ویژه برنامهنویسی vertex-shader و pixel-shader که در صورت نیاز به OpenGL الصاق میشد. OpenGLShading Language زبانی شد که به سرعت در سطح گستردهای مورد پشتیبانی یونیکس، ویندوز، لینوکس و دیگر سیستمعاملها برای توسعهدهنده گرافیکهای تعاملی و برنامههای کاربردی ترسیمی قرار گرفت.
OpenGL ۲.۰
OpenGL ۲.۰ آخرین نسخه عرضه شده تا اوایل سال ۲۰۰۶ میلادی است. 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 ۳.۲ است.
OpenGL Volumizer
OpenGL Volumizer، یک API گرافیکی است که در بخشهای انرژی، تولید، داروسازی و تجارت کاربرد دارد. این API برای انجام کارهای تعاملی با کیفیت بالا و بصری نمودن و شبیهسازی یک محیط با استفاده از مجموعه بزرگی از دادههای حجمی (دادههایی که مختصات یک شی در فضای سه بعدی را نشان میدهند) طراحی شده است. برای نمونه در نرمافزارهای پزشکی برای شبیهسازی وضعیت بخش خاصی از بدن، از این نرمافزار استفاده میشود. OpenGL Volumizer آخرین نسخه این API تا اوایل سال ۲۰۰۶ میلادی است که بر پایه کتابخانه گرافیکی استانداردOpenGL ساخته شده و شامل رابط کلاس ++C و قابلاستفاده در سیستمعاملهای ویندوز و لینوکس ۳۲بیتی و ۶۴بیتی است.
OpenGL Multipipe SDK
OpenGL Multipipe SDK یک لایه API است که مدیریت برنامههای گرافیکی را در زیر سیستمها و ساختارهای گرافیکی چندگانه آسان میکند. برنامههای کاربردی نوشته شده برپایه این API به نرمی و روانی، هم روی سیستمهای رومیزی تک پردازندهای و هم روی سیستمهای چند پردازندهای با سیستمهای گرافیکی قدرتمند اجرا میشوند.
نتیجهگیری
همانگونه که بیان شد ارتباط بین برنامهها و سختافزاری که آنرا اجرا میکند برعهده API است. سازندگان بزرگ نرمافزار و سختافزار API خاصی را برای برنامههای مالتیمدیا آماده کردهاند که مطرح ترین آنها DirectX و OpenGL هستند.
منبع: http://www.shabakeh-mag.com