الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Direct3D vs OpenGL

مغلق
بدأه HGB في 23 مارس 2004 · 15 رد · 16,423 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اذا كنت مبرمجا فانت واحد من ثلاثة :

اما تحب الجرافيكس والملتيميديا وتعرف شيئا عن كيف بعمل اللاعبون الكبار في هذا المجال ,,

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

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

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

أيهما أستخدم 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 تم تصميمه أيضا ليدعم كلا المحركين في نفس الوقت .

خاتمة :

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

أخيرا ماكان من صواب في هذه المقالة فمن الله وماكان من خطأ فمني ومن الشيطان .

1

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#2

شكر جزيلا على هذه المعلومات القيمة اولا

وعندي اقترح

لماذا حاليا لان يتم في المنتدى اختيار اي موضوع برمجي والمناقشة والبرمجة فية

#3

أشكرك أخي HGB على هذه المعلومات القيمة وننتظر جديدك

والقادم مذهل أكثر.

أنت تعرف أننا بدأنا تعلم الـ DirectX قبل تدهور المنتدى في الفترة السابقة وكنت متحمس للتعلم ومازلت أحتفظ بإصدار DirectX 9.0 .

لكني الآن بدأت دراسة الرسم بالـ OpenGL في الجامعة وأجدها مريحة رغم كثرة الدوال المستخدمة فيها وقلة المرونة لكنها تعتمد الأسلوب البرمجي البحت كأي برنامج في السي++ وهذا ما يعجبني.

لكنك بمقالك هذا وضعتني في موقف صعب فأي التقنيتين أختار؟؟؟؟؟؟؟؟

وهل إتقاني للـOpenGL سيفتح لي باب الـDirectX؟؟؟؟؟؟

#4

السلام عليكم

أخى هل يمكنك شرح كيفية التعامل مع أى من الطريقتين

أنا مبتدأ بالسى بلس بلس و لكن أتمنى أن أتقنها

و لكم جزيل الشكر

#5

السلام عليكم ,,

أخي hack ,, من قال أنه لاتوجد مثل هذه الأمور في أيام العز كنا قد بدأنا الكثير من المشاريع وتقدمنا فيها بشكل طيب ,, لكن تدخلت الاقدار لتمنع ذلك ,, وهنحن سنعود من جديد ,,

المشكلة أنني حاليا خارج وطني وسلأعود خلال أسبوع واحد ,, ولاأستطيع هنا أن أدخل للانترنت أكثر من ساعتين كل يومين !!

CompuM4N : ياأهلين ,, اذا تقدمت جيدا ب OpenGL فاستمر ,, لأننا نريد من يعطي دروسا في ذلك أيضا هنا في المنتدى :)

وبالمناسبة نسيت أن أذكر في المقالة أنه ينبغي في النهاية التعرف على كلى التقنيتين وتعلمهما ,,

وأتمنى أن تتبحر في OpenGL وبشكل كبير ,, وبالطبع اتقانك لل OpenGL سيفتح لك برابة تعلم Direct3D على مصراعيها ,,

واليك هذا الموقع الممتليء الممتاز جدا وبه الكثير من البرامج السريعة والرائعة الجاهزة ,,

http://www.codesampler.com

أخي khabini.com : راجع وصلة التعلم الجماعي ل DirectX على الرابط ,,

/index.php?showtopic=37155

وفقكم الله ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

ممتاز جدا والاهم من ذلك المواصلة وان شاء الله هذه المرة نستمر قد تكون مشكلة غيابي واثناء عودتي كان ذلك الوقت

بس هناك شي يحرني

مكتبة الاكواد

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

#7

السلام عليكم ,,

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

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

بارك الله فيكم ,,

تم تعديل هذه المشاركة بواسطة HGB في 14 أغسطس 2004 في 03:56

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#8

للرفع,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

بعد هذه المعلومات القيمة والمجهود الطيب أخى هيثم

مقتنع تماما ب direct 3d وخصوصا اننى لا أعمل خارج الويندوز مهما كان السبب ولأن عندى كروت جرافيك لا تدعم openGL والباقى تدعمها ولكن يجب الاعتماد على تعريف اسطواناتها مش الجهاز :)

#10

----| إقتباس |----

ولأن عندى كروت جرافيك لا تدعم openGL والباقى تدعمها ولكن يجب الاعتماد على تعريف اسطواناتها مش الجهاز

-------------------

دكتور محمد ، هذه أسباب شخصيه وليس تقنيه !!

ولكنك مادمت مقتنع وتعمل فعلا بإستخدام Direct X فإنها حتما الأنسب لك

#11

هى اسباب شخصية فعلا ، ولكنها منتشرة الى حد ما .. معظم مستخدمى الكمبيوتر للأسف عند شرائهم للأجهزة لا يلقون بالا لكروت الشاشة إلا من هو من المهتمين بالألعاب ولكن هذا طبعا ليس المنطق الذى سيؤدى إلى عدم اختيار تقنية openGL :)

#12

وأيضا هذا رأى كاتب Advanced 3d Games programming using Dirext X 9.0

Why use Direct3D? Why not use OpenGL?

For those of you who have never used it, OpenGL is another graphics API. Silicon Graphics designed it in the early '90s for use on their high-end graphics workstations. It has been ported to countless platforms and operating systems. Outside of the games industry in areas like simulation and academic research, OpenGL is the de facto standard for doing computer graphics. It is a simple, elegant, and fast API. Check out http://www.opengl.org for more information.

But it isn't perfect. First of all, OpenGL has a large amount of functionality in it. Making the interface so simple requires that the implementation take care of a lot of ugly details to make sure everything works correctly. Because of the way drivers are implemented, each company that makes a 3D card has to support the entire OpenGL feature set in order to have a fully compliant OpenGL driver. These drivers are extremely difficult to implement correctly, and the performance on equal hardware can vary wildly based on driver quality. In addition, DirectX has the added advantage of being able to move quickly to accommodate new hardware features. DirectX is controlled by Microsoft (which can be a good or bad thing, depending on your view of it), while OpenGL extensions need to be deliberated by committees.

My initial hope was to have two versions of the source code—one for Windows and Direct3D and the other for Linux and OpenGL. This ended up not being possible, so I had to choose one or the other; I chose Direct3D.

#13

تقرير ضخم والله بحييك عليه...

انا بالنسبة الى...الwراحة حاسس حالى :blink: confused من كتر المقالات والمواضيع عن لغات البرمجة و صرت مش عارف من وين ابدا..

بعيين الله...ومستنى حدا منكم يعطينى السليم..

بس على حد علمى انه اذا كنت بدى ادخل برمجة جرافيكس لازم ابدا من لغة الc++ صح ؟؟

سلام للجميع

#14
Graphic_designer_boy كتب:
بس على حد علمى انه اذا كنت بدى ادخل برمجة جرافيكس لازم ابدا من لغة الc++ صح ؟؟

اكيد

موقعي :- www.gamesdevteam.com

#16

جزاك الله خيرا أخى الحبيب

هذا الموضوع مغلق.

مواضيع مشابهة