بالاخره نوبت شد مطلبی که طرفدار زیاد داشت را بنویسم اگر دیر مینویسم بخاطر این هست که مطلب طولانی بود و من فرصت برای نوشتن آن نداشتم. جمعه هفته پیش شروع بنوشتن کردم ولی نوشته هایم همانطور که توضیح دادم پرید. و امیدوارم کسانی مثل آقا وحید عاطفه خانوم که خیلی درخواست کردند از خواندنش لذت ببرند. خوب بگذریم…
قبل از هر چیز در وبلاگ آقای طاهری مطلب جالبی درباره یکی از ابزارهای ویستا نوشته شده که پیشنهاد میکنم حتما بخونید چون خیلی جالب هست و آقای طاهری نشون میده که حوصله اش از من بیشتر هست توی مطلب نوشتن چون دونه دونه منوها را توضیح میده من چون فرصت ندارم مجبورم فقط بیس کار را بگم و بقیه را به عهده خواننده بذارم.
من در مطلب قبلی درباره تفاوت بین نسخه های directx نوشتم و هم اکنون همانطور که قول دادم میخوام راجع به تاریخچه directx و OpenGL بنویسم که طبق آخرین خبری هم که خودم دادم OpenGL 3 از directx شکست خورد و احتمالا directx از این به بعد یکه و تنها روی سیستم عاملها میتازد.
OpenGL هیچگاه نتوانست از نسخه ۷ directx فراتر برود و هنگامیکه directx9 به بازار اومد و بعد از نسخه ۹.0c دیگر حرفی برای OpenGL نماند. و حالا که صحبت از نسخه ۱۰ directx هست و همینطور ۱۱ که احتمالا با ویندوز ۷ عرضه میشود.. من در این مطلب قرار است مسائل این دو رقیب قدیمی را بشکافم. فقط قبل از اینکه بخوام بنویسم ایمیلهایی دریافت کردم که گفتن حتما بی طرف بنویس. من همیشه سعی کردم بی طرف بنویسم اگر مطلبی درباره مایکروسافت مینویسم هدف آموزش هست نه تعصب. متاسفانه کاربران لینوکس در بعضی مواقع تعصبی به قضیه نگاه میکنند تا واقعیت.
تصویری را که در پائین مشاهده میکنید تفاوت بین دو نسخه direct 9.0c و direct 10 نشان میدهد. این تصویر توسط هر دو رندر شده و چنین نتیجه ای بدست آمده که با اینکه در تصویر میبینید تفاوت بین نسخه ۹ و ۱۰ زیاد است ولی نسخه ۱۰ دربین بازی نویسان جا نیافتاد که من دلیلش را خواهم نوشت.
این روزها همه جا صحبت directx هست برای بازی یا نرم افزارهای گرافیکی و کاربرانی که کمتر از ۱۰ سال است به جمع کاربران کامپیوتر پیوستند بدرستی نمیدونند که ۱۰ سال پیش جنگی بین دو رقیب یعنی Microsoft و Silicon Graphics بود. این جنگ بیشتر برای تسلط روی بازار API های ۳ بعدی بود و هر دو شرکت بدجوری تلاش میکردند که که بازار را بدست خود بگیرند در آن موقع مایکروسافت پشتیبانی مالی قوی داشت و شرکت SGI هم تخصص و اعتبار خود را در حوزه Real-time 3d به همه نشان داده بود. هنگامیکه این جنگ در بین این دو وجود داشت SGI موفق شد مشهورترین بازی نویس زمان را تصاحب کنه که نامش هست John carmack.
تا حدودی بخاطر موفقیت موتور Quake پشتیبانی جدی از OpenGL به اندازه کافی اهمیت پیدا کرد تا انگیزه تامین درایورهای کامل را در تولید کنندگان کارتهای ۳d ایجاد کنه. همین ویژگی باعث شد که ۳dfx یکی از مزایای برتریهای اولیه خود را بدست آورده ATI که هنوز با پشتیبانی خود از OpenGL درگیر بود را عقب بزند.
در همین حال مایکروسافت کار خودش را از اول شروع کرده بود و منحنی یادگیری API این شرکت طولانی بنظر میرسید. من در همین وبلاگ مطلب دیگری راجع به direct نوشتم و گفتم که نسخه ۴ directx هیچگاه منتشر نشد. خلاصه direct 3D مایکروسافت اینترفیسی گیج کننده ای برای برنامه نویسان داشت ولی اینترفیس OpenGL واقعا بی نظیر بود. در آن زمان همه فکر میکردند که مایکروسافت هیچگاه به پای OpenGL نمیرسد و بزودی دلسر خواهد شد ولی یکی از شگفتیها این بود که با هربار ارائه نسخه جدید از direct 3D مایکروسافت یک پله به OpenGL نزدیک میشد و واقعا باید اعتراف کرد مایکروسافت برای اینکه بتونه بازار API را بدست بگیره خیلی تلاش کرد. باید اعتراف کرد که درسته که مایکروسافت اینترفیس متفاوتی داشت ولی هر نسخه از direct 3D آن کپی از قابلیتهای OpenGL بود این قضیه ادامه داشت تا اینکه بالاخره مایکروسافت توانست یک API جدید با ویژگی جدید خلق کنه و اون direct 8 بود که با قابلیت سایه زنی و راسی بود. در اینجا نه تنها نسخه direct 8 کمک بزرگی کرد بلکه پشتیبانی مالی اون هم کمک بسیاری بود. SGI که منبع درآمد آن فروش ایستگاهای کاری ۳D گرانقیمت بود ، در موقعیت ناجوری قرار گرفت و پیش بینی میشد که انفجار کارتهای ۳D برای بازیکنان باعث بشه تا ATI و Nvidia برای حرکت به سمت بازار حرفه ای آنهم با قیمت های فوق العاده
پائینی که SGI از عهده آن برنمی آمد ناکام بمونه. توسعه OpenGL هم بخاطر اختلافات جدی تر در بین طرفدارانش با مانع روبرو شد. ARB گروه مسئول تصویب توسعه API از شرکتهای بسیار متفاوت و درواقع رقیبی تشکیل شده بود، دستیابی به یک توافق درباره ویژگی های که باید به این API اضافه میشدند بسیار دشوار بود. ولی مایکروسافت منحصرا با ATI و Nvidia کار میکرد و در صورت عدم توافق بر روی یک موضوع ، از وزنه خود برای اعمال یک تصمیم گیری نهائی استفاده میکرد.
با ارائه directx 9 پیروزی قطعی مال مایکروسافت شد و توانست API خودش را با ابهت کامل به برنامه نویسان تحمیل کنه. تنها john carmack و افرادی که قابلیت انتقال Portability اصرار داشتند به OpenGL وفادار ماندند. ولی بازهم تعداد آنها کاهش پیدا کرد. البته برای خیز گرفتن مجدد OpenGL سرنوشت یاری کرد و اونهم مرورگرهای وب بود و همینطور گروه khronos بیش از دو سال کار OpenGL را دست گرفت که امیدی بر برپایی آن میداد. بالاخره khronos رسما OpenGL 3 را معرفی کرد و قرار بود که این API جلوی نسخه ۱۰ directx مایکروسافت بایسته و بازار نسل بعدی direct یعنی نسخه ۱۱ را خراب کنه ولی متاسفانه کارها طبق برنامه پیش نرفت و directx 10 واقعا قوی بود.
اگر قضیه را نخوام بیش از این توضیح بدم هم به خودم و هم به کسی که تا اینجا این مطلب وبلاگ را خوانده بی انصافی کردم چون این مطلب واقعا زیبا و عالی است و بخاطر همین در ادامه توضیح بیشتری میدم که چرا انقدر directx قدرتمند شده که قابلیت تکامل یافته ۳Dlabs در OpenGL 3 هم حریف directx نتوانست بشه. برای اینکه این مطلب را متوجه شوید باید مجددا به سال ۲۰۰۲ بریم که گفتم که OpenGL درحال از دست دادن بازار بود تا اون موقع هم حتی توضیح دادم با اینکه اینترفیس مایکروسافت فرق میکرد با OpenGL ولی هر قابلیت که در آن نحفته بود کپی از OpenGL بود. تا اینکه SGI شکست خورد و مایکروسافت هم با ارائه directx 9 پشتیبانی از یک زبان سایه زنی سطح بالا یعنی HLSL را معرفی کرد که OpenGL چیزی برای مقایسه با اون نداشت. اما یک توضیح کوچک راجع به SGI و تولید کنندگان کارت بدم که OpenGL از IRIS GL سرچشمه گرفته بود این API که از اول توسط SGI برای نمایش عملکرد سخت افزارهایش مورد استفاده قرار میگیرفت. برای یک مدت طولانی ati و nvidia هم از مدل راندوی sgi پیروی کردند و این به این معنی بود که OpenGL برای تولید کنندگان کارتهای گرافیک بسیار مناسب هست ولی مایکروسافت با ارائه shader ها همه چیز را به هم ریخت و GPU ها از حالت سنتی شون خارج شدند.
در آن موقع یک شرکت به نان ۳dlabs به یک تکامل تازه در openGL جهت اعمال برروی gpu های جدید پی برد. البته چیز عجیبی هم نبود چون ۳dlabs کارتهای بازی خودش را پس از Permedia 2 کنار گذاشت تا بربازار حرفه ای متمرکز بشه ولی باز هم OpenGL یک استاندارد واقعی حساب میشد که ۳dlabs قصد داشت اون و به سمت دوره ای تازه ببره که اولین مورد اون یک زبان shader سطح بالا به نام GLSL بود و این شرکت میخواست که این API را بازنگری کنه. بیشتر ویژگی های openGL روی کارتهای سه بعدی مدرن کارایی نداشت اما نیاز به سازگاری با نسخه های قبلی باعث میشد که تولید کنندگان آنرا پشتیبانی کنند. این قضیه باعث شد کار خیلی به هم گره بخوره یعنی نوشتن درایورها پیچیده میشد و API جدید برای برنامه نویسان گیج کننده میشد. بنابراین ۳dlabs خواستار مشخص شدن یک زیر مجموعه از عملکرد ها بود که اجرای کارآمد توسط GPU را تضمین میکردند و در عین حال ، ویژگی های اضافی یا منسوخ شده نیز باید حذف بشوند. این زیر مجموعه ، OpenGL 2.0 Pure نام گرفت. و برای برنامه نویسان نرم افزاری کاملا کاربردی و جدید در نظر گرفته شده بود. برای حفظ سازگاری ، مجموعه کامل ضمائم openGL 1x در openGL 2.0 قابل دسترس بود. متاسفانه پس از مباحث بی پایان در داخل ARB این طرح با عدم پذیرش مواجه شد و زمانیکه openGL نهایتا در دسترس قرار گرفت، تنها قابلیت پشتیبانی از GLSL به این API اضافه شده بود. تمام پیشنهادات دیگر ۳dlabs به فراموشی رفتند و openGL همچنان از API مایکروسافت عقب ماند.
البته این مطلب هنوز که هنوز هست ادامه داره و شرکتها سعی کردند که openGL را حفظ کنند که مبادا به تاریخ بپیونده و یا اینکه اصلا فراموش بشه. من اگر بخوام بیش از این بنویسم هم از حوصله خودم خارج هست و هم از حوصله کسی که این مطلب را میخونه اجازه بدید ادامه را در مطلب جدیدی در آینده به شما ارائه بدم و همینطور قصد دارم برای اولین بار مطالبی تخصصی هم در وبلاگ درباره directx 11 ارائه بدم که شاید اولین باشم این کار را انجام میدم.
علی جون دمت گرم
من که خیلی حال کردم خیلی جالب بود
کاش منبع خبر رو هم میگفتی
به هر حال دستت درد نکنه و خسته نباشی
ببخشید دوباره مزاحمت شدم
میشه directx10 رو تو xp هم استفاده کرد
مشکلی ایجاد نمیکنه چون اون با ۹ برنامه ریزی شده
البته خیلی ها رو دیدم ۱۰ رو تو xp نصب کردن چطور ممکنه؟
مطلب سورس خالص نداره و گردآوری شده. در مورد directx فقط اسم آن عوض میشه و تغییراتی ایجاد نمیشه. زمانی directx میتونه کارآمد باشه که توسط خود مایکروسافت عرضه بشه. این directx توسط دیگران دستکاری شده تا روی xp بنشینه و باعث خرابی هم میشه.
من متاسفانه با نظر شما موافق نیستم در حال حاظر ps3 بر پایه opengl و xbox 360 بر پایه directx خب خودتون بازیهاش رو با هم مقایسه کنید
[…] روزگاری در همین وبلاگ صحبت از شکست openGL کردیم در همان مطلب هم به این قضیه پرداختم که طرفدارانش […]
سلام
ببخشید منظور بدی ندارم ولی باید بگم تمام اون ویژگیهایی که گفتی تو openGL هست و این چیزی که می گی شکست درست نیست چون کلا این دو تا با هم تفاوت دارند.
روی سیستمهای بر پایه ی ویندوز directx از نسخه ی ۹ به بعد ۳۰ درصد سریعتر از OpenGL کار می کنه یعنی شما باید همه ی بازیها رو رو ویندوز با directx نوشت. ولی directx رو platformهای دیگه اجرا نمی شه و در زمانهایی هم که رندر در runtime انجام نمی شه شما می تونید از OpenGL استفاده کنید. تمام مودلهای شیدر هم با هم جلو می رند یعنی هر ویژگی رو که یکی می ذاره اون یکی هم می ذاره.
شما می تونید به سایت ungine.com برید و دموهای اونها رو بگیرید و با dx9 و dx10 و openGL رو سیستمتون تست کنید. خیلی راحت می تونید نتیجه رو ببینید.
به من ایمیل بزنید بیشتر توضیح می دم ashkan_gc@yahoo.com
با تشکر
http://gamemaker.mihanblog.com
دوست من ممنون از توضیحات
من بیشتر منظورم روی ویندوز و گسترش بود. البته شکست به معنی منقرض شدن نبود مطلب جدیدی نوشتم درباره موفقیت جدید opengl درباره شیدر شاید نظرتون را جلب کنه.
توضیحات بیشتر را در انجمن جدید که تاسیس کردم مکان خوبی است برای همین چیزها ساختم میتونید توضیح بدید خوشحال میشم و استفاده میکنم.
http://www.mywindows.ir/forum
سلام دوستان اگه چیزی در مورد تفاوت direct x با open glدارید لطفا برام ایمیل کنید
k1.sobhany@yahoo.com
من توی همین سایت درباره openGL چند مطلب نوشتم توی کادر search اسمش را بنویس شاید گیر بیاری.
یک نگاهی به سایت nvidia قسمت cool stuff بکنید همشون openGL هستند خودتون متوجه میشین opengl قویتره یا Directx