Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

Direct3D vs OpenGL, أيهما تختار ؟

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • Direct3D vs OpenGL, أيهما تختار ؟

    السلام عليكم ورحمة الله ,,

    اذا كنت مبرمجا فانت واحد من ثلاثة :
    اما تحب الجرافيكس والملتيميديا وتعرف شيئا عن كيف بعمل اللاعبون الكبار في هذا المجال ,,
    أو تحب الجرافيكس والملتيميديا ولاتعرف كيف يتم التعامل مع مثل هذه الأمور من قبل المتمرسين والمطورين والمبرمجين وترغب في أن تعرف ,,
    أو انه ليس لديك علاقة بهذا الأمر ولاتريد أن تدخل نفسك في مجال تطوير جديد اضافي ,,

    فاذا كنت من النوع الأول أو الثاني فاستمر في قراءة المقالة فستفيدك باذن الله .

    أيهما أستخدم Direct3D أم OpenGL ؟ دائما مايطرح هذا السؤال في الكثير من منتديات الحوار ولايستطيع أحد في النهاية أن يعطيك اجابة واضحة ومباشرة ,, والسبب في ذلك تنوع الآراء ووجهات النظر من ناحية النظرة في الماضي وماآلت اليه الآن والمستقبل القريب والبعيد ,,

    الاجابة على هذا السؤال صعبة ,, لكن أفضل اجابة هي مايتوصل اليها الشخص بنفسه ! لذا ستساعدك هذه المقالة باذن الله لتكوين الأرضية المناسبة لتفهم مالذي ستقدم عليه مسقبلا وماهي المنصة التي ستستعملها في ذلك Direct3D أم OpenGL ؟

    أولا : Direct3D :-

    لمحة عامة :

    Direct3D هو أحد أعضاء مكتبة DirectX للملتيميديا, والكل يعرف ماهي DirectX بالطبع, وسنتناول بشكل سريع لاحقا في هذا المقال بعض جوانب DirectX الأخرى.
    قدم DirectX لأول مرة عام 1995 , حيث رغبت Microsoft من شركات البرمجة حينئذ أن تتم برمجة الألعاب لتعمل على الوندوز وليس على الدوز , لكن كانت المشكلة في أن الوصول للعتاد( كرت الشاشة, كرت الصوت .. وغيرها ) بشكل مباشر في الوندوز أمرا صعبا أكثر مماهو عليه في الدوز , لذا رأت Microsoft في أن تقوم بتطوير مكتبة برمجية تعمل كطبقة مساعدة للوصول للعتاد بشكل مباشر مما يساعد في الوصول لذاكرة كرت الشاشة ممايعطي نتائج أسرع بكثير عند عملية تلوين الرسومات على الشاشة .
    استحسنت بعض الشركات الفكرة , لكن الأغلبية منها لم تنصع لذلك لأن DirectX1 الذي قدم في 1995 مع Windows 95 أول مرة , لم يكن مذهلا بما فيه الكفاية ليقنع العاملين في مجال برمجة الجرافيكس للانتقال لاستخدامه , لذا فشلت Microsoft في المحاولة الأولى , وبدأت بتطوير المنتج حتى أصدرت DirectX2 لكنه أيضا لم يكن مقبولا بما فيه الكفاية حتى أصدرت DirectX3 وتم استحسانه بشكل أكبر .
    بعدها توالت اصدارات DirectX الخامسة ثم السادسة والسابعة والثامنة وأخيرا التاسعة , وسيتم تصدير النسخة العاشرة مع ال Windows Longhorn , (بالمناسبة لاتوجد نسخة رابعة من DirectX حيث تم تجاهلها والقفز مباشرة من 3 الى 5 ) .
    تم تقديم عضو DirectX وهو Direct3D الخاص بعمليات التصيير والتلوين Rendering الثلاثية الأبعاد لأول مرة عام 1996 مع DirectX3 , وكانت واجهة Direct3D حينئذ هي Direct3D .
    بعدها تم تقديم Direct3D2 مع ال DirectX5 , ثم Direct3D3 مع DirectX6 , ثم تم القفز مباشرة لتغيير طريقة التسمية ل Direct3D حيث أصبحت Direct3D7 مع DirectX7 , ثم Direc3D8 مع DX8 و Direct3D9 مع DX9 .
    تقريبا الواجهة الوحيدة التي تحظى بتطوير دائم مع كل نسخة من نسخ DirectX هو ال Direct3D , حيث أن باقي المكتبات أمثال DirectDraw و DirectMusic , لم تحظ بتطوير دوري كما حدث مع D3D (اختصار ل Direct3D ) .
    النسخة الحقيقية الأولى بالنسبة للمطورين التي كان يمكن الاعتماد عليها هي DirectX5 والتي تم تصدير Direct3D2 معها , استحسنها المطورون بشكل كبير ,, ولو كنت تلعب بألعاب سنة 97 و 98 على كمبيوترك الشخصي كنت ستذكر مشاكل DirectX5 مع الوندوز المعرب , التي حلت بشكل أفضل في النسخة السادسة مع تقديم واجهة D3D3 .
    النسخة الحقيقية التي أذهلت المطورين هي النسخة السابعة ,, حيث تعتبر بداية نهضة حقيقية في تطوير برامج الجرافيكس ,, قدمت DX7 واجهة D3D7 و DirectDraw7 أيضا .
    لو راجعت ملف الرأس d3d.h الخاص بأي نسخة حالية (7 او 8 أو 9 ) من DirectX ستعرف الفروق الجوهرية بين كل نسخة والأخرى , مثلا لو راجعت الواجهه IDirect3D7 ستجد فروق طفيفة بينها وبين الواجهات السابقة ,, لكن عمل D3D الرأيسي يكمن في الواجهة IDrect3DDevice ,, حيث ستلاحظ كل مرة اضافة طرق Method " وهي تسمية للدوال التي تكون في بيئة الواجهات وليس الفئات " جديدة تعبر عن تطور النسخ الجديدة .
    لن تستطيع أن تعرف كيفية استخدام هذه الدوال الا لو امتلكت على الأقل ال SDK الخاص بالنسخة المراد تعلمها .
    النقلة الحقيقية " في وجهة نظري " هو ماحدث في Direct3D8 الذي طرح مع DirectX8 . حيث أكبر تغيير طرأ هو دمج ال DirectDraw داخل ال Direct3D ,, حيث لانحتاج كل مرة نريد فيها أن نكتب برنامج Direct3D أن نبدأ بخدمات DirectDraw لحصول على واجهة Direct3D لننشيء بعدها ال Device وهكذا لنبدأ في التطوير الفعلي ,, حيث تم اختصار الأمر بانشاء كائن لواجهة IDirect3D8 مباشرة دون الحاجة حتى لذكر سيرة واجهة DirectDraw وهي IDirectDraw7 (لاحظ هنا أن واجهة DirectDraw وهي IDirectDraw7 هي نفسها الواجهة في DirectX7 و DirectX8 حيث لم يتم تطويرها من 7 حتى الآن مطلقا ).
    هذا التغيير الجوهري الذي طرأ على Direct3D8 اختصر عدد الأسطر اللازمة لكتابة كود باستخدام تقنية الجرافيكس ل DirectX بشكل كبير , حيث كانت هذه المشكلة هي أكثر مايرعب الناس في الDirectX ويجعلهم ينتقلون لل OpenGL . عموما تم اضافة المزيد من الخدمات لل Direct3D8 أمثال تقنية ال Point Sprite التي كانت تحتاج لتجهيز خارجي بكتابة فئات خارجية مساعدة ,, تم تضمينها للتسهيل داخل ال Direct3D , حيث توجد الكثير من هذه الحيل والتقنيات التي يستخدمها المبرمجون ولم تتم اضافتها لل Direct3D بعد أمثال ال Particle System و Light Volume فربما تتم اضافتها في نسخ لاحقة .
    أخيرا تم طرح DirectX9 السنة الماضية وقدمت معه واجهة D3D9 وهي IDirect3D9 بدون تطوير واجهة DirectDraw أيضا حيث ظلت كما هي IDirectDraw7 .عموما تمت اضافة بعض الأمور الجديدة للواجهة IDirect3D9 ,, لكنها ليست ملحوظة للمستخدم العادي أمثال line antialiasing (تنعيم حواف الخطوط ) وهي تقنية مستخدمة في أغلب الألعاب حيث تعطي تدرجات من معالجة البيكسلات الناتئة لازالة التكسرات وجعل الحواف تبدو أنعم في المشهد لكنها تحتاج لعتاد ( كرت شاشة ) قوي .

    مالسيء في Direct3D ؟ :
    بداية معمارية DirectX كلها مبنية في الأساس على تقنية COM وهي اختصار ل Component Object Model , تقنية COM تقنية مرعبة في تطويرها وصعبة نسبيا في استخدمها ,, لكنها مرنة جدا في التعامل .
    تم تطويرها تحديدا لاستخدامات ال Distributed Systems أو الأنظمة الموزعة ,, حيث يمكن انشاء مكون COM واستخدامه من على خادم انترنت أو Server بعيد وهذا القسم مايسمى ب DCOM اختصار ل Distributed Com " كوم الموزعة ",, ويحتاج لمعلومات أكثر عند طلب انشاء واجهة صالحة للاستعمال من كائن DCOM معرف مسبقا ويتم استدعاء الدالة CoCreateInstanceEx ببارمتراتها الغريبة لانشاء كائن لواجهة صالحة للاستعمال.
    أما مانستخدمه في DirectX فهي واجهات COM عادية لحسن الحظ ,, وانشاء كائنات واجهة صالحة لاستعمال منها أمر أسهل من ال DCOM . يتم استخدام CoCreateInstance لانشاء تواجد كائن لواجهة كائن COM , وتوجد دالة أخرى لانشاء تواجد كائن لواجهة من أصل كائن آخر وهي مقدمة بشكل أساسي مع كل مكون COM حيث تقدم الواجهة IUnknown الطريقة "الدالة" QueryInterface لتعيد كائن صالح لواجهة ذات GUID معين , وأي واجهة لكون COM يجب أن ترث من الواجهة الأساسية IUnknown .
    المشكلة أن قوانين COM كثيرة نوعا ما وطريقة التعامل الكائنية فيها طويلة مقارنة بدوال OpenGL الصريحة والمباشرة , وتحتاج لتعود من قبل المبرمج حيث أنها في البداية تبدو لو انغمست في تعقيدتها لغة برمجة جديدة كليا .

    يمكن للبعض أن يعتبر أن DirectX مبنية على أساس COM أمرا سيئا فيما يعتبره المتقدمون ميزة , حيث من ميزات COM الديمومة , وهي تعني أني الواجهات التي تم تعريفها وانشائها سابقا أمثال Direct3D2 مثلا من سنة 1996 وحتى الآن لن تتغير مطلقا في جميع أرجاء العالم , حيث أن الواجهة معرفة برقم فريد عموما GUID ذو 128 بت يضمن عدم تكرار اسم الواجهة لفترة طويلة .
    فالذي يحدث أن Microsoft عندما تريد تطوير واجهة جديدة مثلا تطوير واجهة Direct3D7 حيث كانت آخر واجهة قبلها Direct3D3 فكل الذي سيحدث هو انشاء الواجهة Direct3D7 الجديدة كليا برقم GUID مختلف وكتابة الطرق "الدوال " الجديدة الخاصة بها والوراثة من الواجهة التي قبلها وهذه الوراثة كما التي في الفئات Classes العادية . بهذا يمكن لمطور أن يكتب برنامجا يستخدم الواجهات Direct3D8 مثلا أوحتى Direct3D2 في وقت تتواجد فيه Direct3D9 !! . ولهذا السبب أيضا ستظل الألعاب المكتوبة سابقا بنسخ أقدم من DirectX بالعمل في حين أن ملفات ال dll في النظام تتغير حسب النسخة الجديدة من DirectX والتي ستتضمن بالطبع النسخ الأقدم من الواجهات السابقة .

    من المساويء أيضا أن DirectX يتم تطوير نسخة جديدة منها كل سنة أو أكثر تقريبا , ويتم عادة اضافىة أمور في DirectX لم تتم اضافتها في العتاد المصنع من قبل الشركات , مثلا توجد حتى الآن بطاقات عرض " كروت شاشة " لاتدعم DirectX9 بشكل كامل , لكن بطاقات العرض المتطورة أمثال GeForceFX 5200 ومافوق يتم دعم DirectX9 بشكل كامل فيها , لكن بطاقات العرض الرخيصة لايتم دعم كل ميزات DirectX9 فيها حتى فترة من الزمن ,,
    مقارنة بتطور العتاد السريع جدا هذه الايام يعتبر المحققون أن تطور DirectX شبه السنوي بطيء نوعا ما حيث يظهر جيل جديد من بطاقات العرض كل 8 شهور تقريبا , وأقول جيل جديد وليس سرعات أعلى وفقط , ناهيك عن العتاد الذي يدعم ميزات اضافية من هنا وهناك كل شهرين أو ثلاثة.

    من المساويء التي كانت في DirectX7 كما قلت البدأ بDirectDraw يزيد الكود بشكل كبير للابتداء بالأمور الحقيقية مثلا رسم أول مضلع في الشاشة حيث كنت تحتاج لحوالي 800 سطر , لكن بعد Direct3D8 أصبحت عدد الأسطر حوالي 200 سطر فقط للبدأ المباشر من الصفر ,, لكن مع تنصيب DirectX9 يتم انشاء مداخل جديدة ل Wizard مع ال VS.NET للابتداء ال Framework اطار العمل الخاص ب Direct3D حيث يمكنك أن تبدأ برسم أول مضلع في المشهد بعد 20 سطر كود فقط أو أقل !! لكن ال Framework يحتاج لبعض التعود على مظهره حيث هو منظم بشكل كائني كليا , ويحتاج لبعض الصبر لفهم مداخله ومخارجه حتى تعتاد عليه . بقي أن أذكر أن ال framework كان خيار المستخدمين المتمرسين منذ فترة طويلة ,, لكن بعد اضافته على شكل Wizard أصبح الأمر أسهل وأسرع كثيرا .

    أمر آخر مقارنة ب OpenGL حيث أنه Open Standard وهذا يعني أنه يمكن لشركات أخرى أن تطور وتزيد في ال OpenGL حتى يتم في النهاية تبنيها من قبل لجنة ال OpenGL وهي ARB , لكن بالنسبة ل DirectX فهي حكر ل Microsoft فقط , يمكن اعتبار هذا الأمر سيئة ويمكن أن لايعتبر كذلك , لأنه في النهاية مطورو ال DirectX يتخذون قرارات التطوير بعد الرجوع لعدة مصادر مختلفة وبعد التأني والمراجعة .

    أمر آخرأنه قد تم اعتماد لغة السي++ للتطوير باستخدام DirectX في الأصل , لكن أي لغة تدعم COM ويمكنها التخاطب مع مكونات COM واستخدام المؤشرات يمكن أن تستخدم DirectX , حتى وقت قريب لم يكن بالامكان كتابة Code ل DirectX باستخدام لغة الفيجوال بيسك , لكن تم الالتفاف على هذا الأمر ابتداء من DirectX7 , حيث تمت اضافة مكتبة جديدة وهي dx7vb.dll لاستخدامات Visual Basic .
    اللغات الأخرى أمثال Delphi و Java يمكنها استخدام DirectX بسهولة أيضا , مع أنه توجد نسخة DirectX خاصة بالجافا اسمها DirectX For Java3D .

    وبالطبع أسوأ مافي ال DirectX أنه لايمكن استخدامه سوى في بيئة Microsoft Windows , وهذا يجعله غير عمليا في نظر أصحاب المنصات المتعددة والبيئات المفتوحة .

    كلمة أخيرة :-
    أغلب أو بالاصح كل شركات تصنيع بطاقات العرض عملون على دعم DirectX في منتجاتهم , أي أن فرصة كتابة كود باستخدام تقنيات متطورة في آخر نسخة DirectX لتعمل بشكل جيد أكبر من تلك التي تكون عند استخدام OpenGL , حيث لايتم دعم امتدادات OpenGL وهي المكتبة التي بها الأمور المتطورة والتي يتم تنقيحها وزيادتها بشكل سريع موجودة في ملفات الرأس glext.h . هذه الامتدادات لايتم دعمها من قبل مصنعي العتاد "بطاقات العرض" بشكل ثابت , لذا يجب استخدام بطاقات عرض معينة لدعم هذه الخصائص .
    ففي النهاية direct3D يكون كتلة واحدة يتم تطويرها كل سنة بدون أي لواحق أخرى , سوى ال Patches , ال OpenGL بها ملفات الامتداد وهي قوية جدا وبها أمور فعالة لغاية , لكن اذا لم يتم تبنيها من قبل مطوري بطاقات العرض فما الفائدة ؟!!

    أمر آخر هو أنه يوجد حاليا Managed DirectX , مصمم ليبقى ويعمل مع لغات برمجة منصة الدوت نت أمثال VB.NET والسي# والسي++ دوت نت , وأصبحت أسهل من ال Native DirectX في الاستخدام .

    أخيرا ينصح المطورون باستخدام DirectX و Direct3D لكتابة الألعاب في منصة الوندوز , ولو كنت تعرف أن XBOX بشخصه ألعابه مطورة باستخدام DirectX لمجدت هذه المنصة الرهيبة فعلا .
    وينصح المطورون في نفس الوقت باستخدام ال OpenGL لاستخدامات الأخرى , أمثال كتابة برامج الجرافيكس , وعمليات المحاكاة CAD , وبعض الأمور الأخرى المتخصصة , وسبب ادعائهم بالطبع هو أنه سيتم تشغيل كهذه برامج في منصات متخصصة أمثال UNIX وغيره . لكن بالطبع كل مافي OpenGL يمكن كتابته بال Direct3D , والعكس صحيح أيضا لو تم استخدام ال Extensions وهي glext.h مع العتاد المناسب , لذا يمكنك كتابة برامج محاكاة عمل مفاعل نووي باستخدام CAD في منصة الوندوز وباستخام DirectX .


    ثانيا : OpenGL :-

    لمحة عامة :
    في باديء الأمر تم تطوير OpenGL من شركة Silicon Graphics المتخصصة عام 1992 , و OpenGL حاليا يتم مراجعتها كليا من قبل هيئة ((ARB Architectural Review Board المكونة في الأصل من عدة شركات أمثال 3D Labs, SGI, Apple, nVidia, ATI, Intel, id Software, yes. وحتى Microsoft .
    OpenGL هي Open Standard وليست Open Source, أي أن كودها المصدري ليس متاحا للجميع, وانما للشركات فقط التي تريد تطويره.

    توجد نسخة من OpenGL من SGI وتوجد نسخة أخرى خاصة ب Microsoft وهي تلك التي تصدر مع نظام التشغيل وندوز , ونسخة Microsoft مبنية في الأساس على نسخة SGI .
    وتوجد نسخة مكتبة API أخرى مشابههة في عملياتها ودولها لل OpenGL وتسمى ب Mesa3D http://www.mesa3d.org لكنها مقدمة ك Open Source , حيث يمكنك الوصول لكودها المصدري وتفعل به ماتشاء وهي مكتبة متوازنة وقوية وتعمل في كل منصات التشغيل , لكن مشكلتها الكبرى أن عملياتها الداخلية غالبا لاتكون مدعومة في العتاد " بطاقات العرض " .

    مكتبة OpenGL ليست كما ال DirectX تعتمد على بنية COM ف OpenGL عبارة عن مكتبة دوال API عادية ومباشرة ويمكن كتابة كود كامل بها باستخدام أي لغة برمجة وبشكل مباشر , من الجافا وحتى VB مرورا بالسي والسي++ .
    مكتبة OpenGL أيضا كما Direct3D تستخدم مجاري التحويل والاضاءة لتحويل واضاءة الكائنات بنفس الاسلوب تقريبا , وبشكل عام اسلوب كتابة الكود في التقنيتين متشابه وبشكل كبير , لذا يمكن لمن يتعلم Direct3D أن يتقن OpenGL بشكل سريع جدا , لكن العكس قد يحتاج لبعض الوقت , نظرا لبعض تعقيدات الابتداء ب directX كاستخدام الواجهات والتعامل مع COM .
    أسلوب OpenGL الدالي يجعل كتابة الكود ومعالجة الأخطاء أسهل من تلك التي في Direct3D , لذا يمكن للمبتدئين في مجال الجرافيكس تعلم OpenGL أسرع من Direct3D , لكن عندما تتقدم في المستوى وترغب في الدخول للأمور المتقدمة أمثال ال Point Sprite مثلا فانها مدعومة داخل Direct3D ابتداء من DirectX8 , لكنك تحتاج للامتدادات الخاصة ب OpenGL لتكتب كود مثل الذي ب Direct3D , والمشكلة تكمن في دعم الامتدادات من قبل مصنعي العتاد وفقط .
    OpenGL Extensions امتدات OGL, هي عبارة عن ملف glext.h مع المكتبة الخاصة بها وتضم الكثير من الدوال الجديدة والبارمترات مع معرفات خاصة بها تقوم بأمور اما لتسهيل خصائص سابقة, أو لدعم ميزات جديدة موجودة في العتاد "بطاقات العرض".
    عموما الامتدادات مرنة للغاية وتضم الكثير جدا من الدوال المفيدة والسريعة لكنها لاتكون غالبا مدعومة من كل شركات تصنيع العتاد , والأمر الآخر أنه يمكن كتابة كود قوي جدا بها لكنه في نفس الوقت قد يكون معقدا وغامضا ومتعب في ازالة العلل.

    بالطبع اعتماد OOP كما في DirectX يسهل الوصول للدوال المطلوبة دون الدخول في تعقيدات كثرة الاسماء في البرمجة الاجرائية كما في OpenGL , حيث البرمجة الاجرائية باستخدام دوال فقط في OpenGL يسبب في مشاكل كثرة وتشابك وتعقيد طريقة التسمية .

    والمميز في OpenGL أنه يمكن استخدامه في كل منصات التشغيل , والكثير من الألعاب الناجحة مكتوبة أيضا بهذا المحرك .

    أخيرا نسخ ال OpenGL المقدمة من قبل Microsoft بدأت بالنسخة OpenGL 1 ثم OGL 1.1 ثم 1.2 ثم 1.3 ثم أخير 1.4 .

    مالسيء في OpenGL ؟

    أولا الكثير من الامتدادات الموجود خاصة بشركات تصنيع عتاد معينة فقط , أي أنها لن تعمل في بطاقات عرض أخرى . والسبب في ذلك أنها مقدمة من قبل الشركات ليس للأغراض التجارية العامة وانما لاغراض البحوث والتصميم الخاصة والاختبارات .

    أيضا طريقة تسمية الدوال قد تتسبب في الكثير من الارباك لكثرتها وعدم اعتمادها على OOP .

    وأيضا بالمقارنة مع Direct3D , يقدم Direct3D خدمات أكثر من تلك التي في OpenGL بدون الامتدادات وللمزيد من التفاصيل في هذا الشأن راجع الجدول في الصفحة التالية
    http://www.xmission.com/~legalize/d3d-vs-opengl.html

    كلمة أخيرة :-

    اذا كنت تكتب برامج لتعمل في منصة خارج الوندوز فابتعد عن DirectX وعليك ب OpenGL فهي المطلوب في هذه الحالة . أما ان كنت تكتب برامجا للوندوز فأنا أنصحك ب DirectX والسبب لأنها مدعومة وبشكل كامل من أغلب مصنعي العتاد هذه الأيام , هذا بالطبع اذا كنت تكتب برامجا تجارية للتوزيعها في السوق كما في الألعاب مثلا . لكن اذا كنت تكتب برامجا لعمليات محاكاة الانظمة باستخدام CAD مثلا أو عمليات تصيير لمجسمات ونماذج معقدة أخرى فلك الخيار في تبني Direct3D أو OpenGL , لكن قد يتفوق OpenGL لو وجدت مثلا بعض بطاقات العرض المتقدمة للمحترفين ذات الأسعار أكثر من 1000 دولار تدعم بعض الخواص المتقدمة للامتدادات في OpenGL فعندها OpenGL قد يكون الخيار الصحيح .

    لكن في أغلب الاحيان قد نستخدم Direct3D لبرامج الوندوز للسبب الوظائف المتقدمة بشكل عام والدعم من قبل كل مصنعي العتاد وأيضا لأن Direct3D مدعوم داخل مكتبة متكاملة بها أعضاء أخر وهم :

    1) DirectDraw
    2) Direct3D
    3) Direct Music
    4) Direct Sound
    5) Direct Play
    6) Direct Show
    7) Direct Input
    8) Direct Setup

    يشكل الاعضاء الثمانية حلقة وصل قوية لتطوير برامج متقدمة جدا في مجالات متعددة من الصوت والصورة والعرض وحتى التحكم في عصى الألعاب Joystick وأيضا اللعب عبرة الشبكة Multiplay .
    توجد أيضا مكتبة صوت خاصة بال OpenGL وهي OpenAL , ويتم حاليا الاعداد لمكتبة تسمى OpenML وهي بالنسبة ل OpenGL كما ال DirectX لل Direct3D .

    وأيضا يتم حاليا التجهيز للنسخة OpenGL 2 ,ويمكنك متابعة بعض التفاصيل على هذا الرابط http://www.3dlabs.com/support/developer/ogl2/index.htm

    أداء Direct3D وأداء OpenGL :

    الأداء بين الاثنين بشكل عام متقارب ولايتفوق أحدهما على الآخر بسبب البنية الداخلية مطلقا , ولكن يمكن أن يتفوق أحدهما على الآخر بسبب الامكانات المضافة لبطاقة العرض أو العتاد بشكل عام . فمثلا بطاقة عرض تدعم كل وظائف Direct3D9 جربنا عليها برنامجين أحدهما مكتوب ب Direct3D9 يستفيد من الامكانيات القصوى ل Direct3D9 التي يدعمها العتاد , والآخر مكتوب ب OpenGL "وغالبا ماسيكون مكتوب بميزة موجودة في ال Extensions " , اذا لم تكن ميزة ال Extension مدعومة في بطاقة العرض فان كود Direct3D9 سيعمل أسرع وبكل تأكيد هذا اذا عمل كود OpenGL أصلا حيث اذا لم تكن الميزة التي يعمل بها البرنامج مدعومة في بطاقة العرض يمكن ل OpenGL أن يستخدم ميزة Software Rendering لمحاكاة العمليات التي تحدث في معالج بطاقة العرض GPU داخل المعالج الرئيسي CPU , وبالطبع كل هذا مقابل الكثير من التأخير في الوقت , حيث أن معالج بطاقة العرض GPU أسرع في العمليات المخصصة للعرض من ال CPU العام .

    عموما لم أجري الكثير من التجارب في هذا الشأن, لكن سأقوم بها قريبا وألخص النتائج وأضيفها في المقال باذن الله .

    برامج تم تطويرها باستخدام OpenGL أو Direct3D :

    كما ذكرت سابقا XBOX يتم تطوير ألعابه باستخدام محرك Microsoft DirectX والكثير من الألعاب الناجحة جدا مكتوبة ب DirectX أمثال Fifa بأجزائها , Unreal Tournament , Generals وغيرها الكثير بشكل عام أغلب العاب ال PC مكتوبة ب DirectX .

    Play Station2 يدعم OpenGL, والمحرك المدهش الخاص ب Quake3 تم تصميمه باستخدام OpenGL ,Half-Life تم تصميمه بكلا المحركينOGL و D3D "كل على حده في نفس الوقت " , برامج الجرافيكس المتطورة أمثال 3DStudio Max تم تصميمه أيضا ليدعم كلا المحركين في نفس الوقت .

    خاتمة :
    أرجو أن تكون هذه المقالة قد أفادتك في التعرف على كلا المحركين بشكل أفضل , ليكون لك الخيار في النهاية لاختيار المحرك المناسب .

    أخيرا ماكان من صواب في هذه المقالة فمن الله وماكان من خطأ فمني ومن الشيطان .
    منتقول من موقع الفريق العربي للبرمجة
    وأرجو أن يعجبكم ويفيدك
    سبحان الله وبحمده * سبحان الله العظيم


  • #2
    انقطع نفسي وأنا عم إقرأ من كتر ماالمقال طويل

    الله يجزيك الخير مقال ممتاز
    وبحب عقب بشيء بسيط ، حسب ماشفت خلال شي سنة ونص من الدراسة والبحث بمجال الجرافيك :
    كل مجال برمجي (والجرافيك من هالمجالات) مقسوم لقسمين :

    الأول : القسم المفاهيمي :يلي هو عبارة عن مفاهيم نظرية مجردة تحتاج إلى الفهم والتفكير وليس إلى الكتابة والكود مثل : "كل نقطة في الفضاء الثلاثي الأبعاد لها 3 مركبات x,y,z" هذا مفهوم يجب فهمه وليس حفظه.

    والدليل سلسلة
    GPU Gems الرائعة يلي إذا شفتوها مارح تلاقوا إلا شوية كود والغالبية الساحقة مفاهيم , يلي بيحب يطلع عليها :
    http://developer.nvidia.com/page/documentation.html

    الثاني : القسم القواعدي :
    يلي هو طريقة التعبير عن المفاهيم بشكل مكتوب Code ويلي بيحتاج لحفظ أكتر من الفهم.
    وبرأيي القسم الأول أهم لأنو القسم التاني مجرد حفظ لطريقة التعبير يلي بتستخدمها هي المكتبة أو تلك

    ولازم نهتم بالقسمين معا ومانتوجه للكود وننسى المفهوم.........وإلا شوبدنا نكتب وليش بدنا نكتب

    وشكرا مرة تانية على المقال الرائع
    I Love Nvidia Cg

    تعليق


    • #3
      LordShadow
      مقالة جميلة جداً .. جزاك الله خيراً .
      ولكن أعتقد أنها متقدمة جداً بحيث لو قام مبتدئ بقراءتها سيهرب من عالم برمجة الألعاب دون رجعة

      ممكن أن ألخص مقالك وأضيف من عندي أنه :
      الأوبن جي أل وصل لمرحلة متقدمة جداً ( في الزمن الماضي ) مقارنة بالدايريكت إكس ، وأتاح للمبرمجين الكثير والكثير من الدوال ، ولكن دعمه بسيط لم يمكنه من مقارنة نفسه بالدايريكت إكس ( في هذه الزمن )
      لذلك أنا أعتقد جازماً أن الدايريكت إكس الآن هو أفضل من الأوبن جي أل بألف مرة .

      ولكننا في هذا الوقت قد لا نحتاج كل الخصائث الجديدة في الدايريكت إكس 10 مثلاً . لذلك ، يمكننا إستنتاج أنه للشخص الجديد في برمجة الألعاب ، قد يجد أن الدايريكت إكس والأوبن جي أل متساويين .

      تعليق


      • #4
        الحسنة الوحيدة في الدايركت إكس في رأيي هي أنها مكتبة متكاملة من صوت وصورة (تو دي وثري دي أيضاً).. بينما الأوبن جي إل مكتبة صورة فقط لذلك عليك البحث عن مكتبة صوت توازيها في الجودة..

        أنا لا أطور ألعاب لكن لو كنت أطور لاستخدمت أوبن جي إل لدعمها لأكثر من نظام تشغيل.. لا أحب الاحتكار لنظام تشغيل واحد ومحدد..
        Culture is your operating system

        تعليق


        • #5
          طبعا المقارنة بتكون فقط بين OpenGL و الـ Direct3D لأنهما متقابلين

          أما الـDirectX فهو platform كاملة متل ماقال الأخ dyf.
          I Love Nvidia Cg

          تعليق


          • #6
            الصراحة من فترة إسبوع و أنا أبحث في هذا المجالو أقارن فتوصلت لعدة نتائج و هي :
            1- إذا كان الأوبين جل لا يستخدم OOP فهذه يمكن إعتبارها ميزة لأنه معروف أن هذه الميزة تسبب بطئ في البرنامج أو في حالتنا اللعبة فإذا كانت أسرع يمكن زيادة عدد البوليقون على هذه الأساس حتى تصبح بسرعة الدايركت إكس و بذلك نكون حققنا جودة أكثر .
            2- و أيضاً أنه يمكن تعلم الأوبين بشكل أفضل لكثرة المحركات المبنية عليها و أغلبها OpenSource فإذا أستطعنا قرائه مثال عملي على محرك هذا يعلمنا الكثير .

            هذه ما أذكره في هذه اللحظة من إيجابيات الأوبين التي لم تذكر في الدرس

            و مشكور على النقل ...و على فكرة هذا مقال مترجم

            <<Nobody>> سابقاً

            تعليق


            • #7
              اولا احب اشكرك علي الموضوع

              اغلب المحركات العالمية تعمل علي الدايركت اكس و الاوبن جى ال معا , الفكرة ان الدايركت اكس يتطور مع كروت الشاشة الجديدة فتري المميزات الجديدة تنزل في كل اصدار جديد, و لكن كما قال الاخ اسامة ان المبرمج الجديد لن يحتاج الي كل ما هو جديد في الدايركت اكس و من الممكن ان لا يقدر ان يستعمله فأنا اري الافضل ان تدرس المحركين معا و تختار ما يناسبك , لأن حتي الشركات العالمية تعمل بالمحركين فأذا كنت تبحث عن التميز فخذ الاثنين , و ديه زيادة خبرة برضو
              Egypt


              I Love Direct-X

              سبحان الله و بحمده سبحان الله العظيم
              اللهم صلي وسلم و بارك علي سيدنا محمد

              تعليق


              • #8
                مشكور اخوى على المقالة المفيدة هذه - انا عن نفسى افضل open gl حيث انى رأيتها الأسرع وشاهدت تكبيقات صاروخية صنعت بواسطنها مقارنة بالديركت اكس - موما مشكور على المقالة

                مع تحياتى
                عميد المبرمجين العرب سابقا

                تعليق


                • #9
                  يعني مثلاً - تصديقاً لكلام البنا - نزلت ديمو للمحرك ogre الديمو تقدر تشغلها عن طريق الأوبين أو الدايركت لما أختار
                  أوبن بعطيني تقريباً 85 fps أما لو على الدايركت بعطيني بحدود 10 fps
                  عاد شوف الفرق!!

                  <<Nobody>> سابقاً

                  تعليق

                  يعمل...
                  X