|
|
![]() |
|
#1
|
||||
|
||||
|
<<< وبدأت الاسطوره ؛ الدرس الاول و الثاني من دوره برمجه الالعاب >>>
بسم الله الرحمن الرحيم
******************* كل عام وانتم بخير رمضان كريم اعاده الله عليكم بالخير واليمن والبركات اليوم سنبدأ في اول درسين في دوره برمجه الالعاب فهيا بنا ننطلق ![]() ![]() اذهب الي هذا الموقع http://www.winfuture.de/news,7953.html واختر Direct x 9 SDK ( dx9sdk.exe , 227732 kb , English ) عند الانتهاء من تحميل الملف بفك الضغط عنه . وبعدها .. نفتح الملف ونفقوم بالضغط علي Install بعد ذلك اتبع الخطوات كما في الشكل :- ![]() ![]() ![]() ![]() ![]() سيتم رفعه قريبا ولمن لديه لن يجد مشكله في تحميله
__________________
عوده بأذن الله ![]() torrent is my life
|
|
#2
|
||||
|
||||
![]() كارت الشاشه :- بما ان الرسومات تعتمد عليه بشكله اساسي فكان هو بدايه حديثنا وسنتكلم عمه بأختصار كرت الشاشه او ( video adapter , graphics adapter , display adapter , video display adapter , video card , video board , .................. الخ ) هي قطعه متصله مع الوحه الام ( mother board ) تعمل علي تخزين ومعالجه الصور وتحويلها الي اشارات تستطيع الشاشه اظهارها اصبحت كروت الشاشه عنر اساسي في الكمبيوترات من عام 1990واخذ المصنعون يتفانون في كيفيه صناعتها حتي توصلوا الي عمل مجسمات ثلاثه الابعاد اول شركه اهتمت بمعالجه الروسومات ثلاثيه الابعاد هي DFX 3 والتي اطلقت كروت الشاشه الخاصه بالاجسام ثلاثيه الابعاد وكانت تحل الاسم voodoo وايضا هي من ابتكر قناه تسمي ( GPUs ) Graphics pressing units وهي منطقه موجوده في كرت الشاشه تقم بالمعالجات الرياضيه للاشكال ثلاثيه الابعاد مما يريح المعالج ( processor ) من هذا لاعبئ والذي يؤدي بدوره الي اسراع عمليه المعالجه للعبه ومن الممكن ان يحوي كرت الشاشه اكثر من قناه GPU فكلما زادت عدد القنوات زادت الجوده . من اشهر شركات في مجال كروت الشاشه :- NVIDIA Geforce ATI ![]() ![]() وهي عباره عن ملفات يستخدمها المبرمجون من اجل ربط برامجهم بنظام التشغيل ![]() تقوم فكرتها كالتالي :- بما ان نظام التشغيل يتخدم بعض العناصر مثل ( textbox- font – color – button ) او بعض الدوال مثل( create window – set window text – text out – copy file – exit window ) او بعض المكتبات مثل ( user 32 – gdi32.dll – kernel 32 ) او بعض من data structure مثل font من اجل التحكم في عملياته فسنقوم بستخدامها لصالح برنامجنا . ظهرت هذه المكتبات في اربعه اجيال :- الاول win16Bit : الثاني win 32 Bit: حيث تكتب الدوال بستخدام لغه السي والسي بلس بلس وجائت المكتبات( user 32 – gdi32.dll – kernel 32 ) الثالث win 64 Bit : حيث احتوت علي نفس فكره win32 ولكن بشكل اوسع فتستطيع الدوال معالجه وعنونه ارقام اكبر وجائت هذه المكتبات علي نظام تشغيل windows XP , windows 2003 الرابع winfix: وهذا الجيل في windows Vista حيث انه يدعم جميع خصائص .Net بما فيها ( GRL ) وهذه الخاصيه خاصه بأداره الذاكره يعني لا يستخدم المبرمجون هذه العلامه ( ~ ) ال Destructor و ايضا تم استبدال مكتبات الرسوميات ال GUI بالAvalon والتي تدعم بدورها الخائص الجيده لكروت الشاشه مثل المؤثرات ( الاضائه و الظلال ) وهذا يعني انك من الممكن ان تري ظل الفورم علي سطح المكتب او صدي الصوت ان كان لديك ملف داخل ملف ( سيتضح ذلك اكثر لمستخدمي الفيستا ) ![]() ![]() عند التكلم عن برمجه الالعاب فنحن نتكلم عن لغه الجرافيكس ومن امثله هذا اللغات ال Direct X و ال Open GL وال GDI وتستخدم هذه اللغات في نظام ويندوز ويونكس وايضا Quick Drow التي تستخدم علي انظمه ماكنتوش . يعتبر Direct X جزء من مكتبات API اول ولاده لل Direct X كانت عام 1995 و كان في البدء يعمل علي نظام الدوس وظل يتقدم الي ان وصل الي النسخه الثامنه التي كانت نقطه تحول حيث استطاع المطورون تحيقيق المعاله الصعبه السرعه و السهوله معا وجائت ايضا بمصطلاحات جديده في View وسنتكلم عن هذه المسطلحات لاحقا و كانت هذه النسخه الفعاله مع Low Level API وبعد هذا التقدم الهائل للنسخه الثامنه جائت النسخه التاسعه لتحوي جميع عناصر النسخ السابقه بالاضافه انها تدعم 24Bit وايضا Gamma وجائت لتواكب تطور .NET لتدعم c# و ال VB.Net . ![]() ![]() و هي الطبقه العازله المتمثله في Direct X ما بين الهاردوير و المتمثله في كارت الشاشه و السوفت وير المتمثله في اللعبه ![]() تكمن فائده الشكل بالاعلي ان المبرمج للعبه لا يهمه اي نوع كارت شاشه سوف يعمل به المستخدم وانما يهمه ان تكون لعبته تدعم خصائص Direct X و نفس الحال مع مصمم كارت الشاشه فهو لا يهمه اي لغه سوف يستخدمها المبرمج لعمل اللعبه و انما يهتم ان تكون كارت الشاشه يدعم Direct X وبهذه النظريه اصبح Direct X المترجم ما بين كرت الشاشه و اللعبه . أخر تعديل بواسطة totysalah ، 15-09-2007 الساعة 03:54 PM |
|
#3
|
||||
|
||||
a1- Direct 3D : وهو من اهم العناصر الذي يمثل القالب الذي تتشكل فيه اللعبه ( الفورم ) و اعطاء الاجسام الشكل ثلاثي الابعاد . 2- Direct Draw : وهو العنصر المشابه ل Direct 3D ولكنه يدعم فقط الاجسام ثنائيه الابعاد . 3- Direct Sound : وهو العنصر المستخدم من اجل عمليه التحكم في الاصوات 4- Direct Play : العصر المستخدم من اجل جعل اللعبه تدعم اكثر من مستخدم ( Network ) بأستخدام ( server – client ) . 5- Direct Input : العنصر الذي يتيح التحكم بلوحه المفاتيح او الفاره او زراع التحكم . 6- Audio Video Playback : العنصر الذي يتيح استخدام ال Multimedia مثل ادخال ملف فيديو . أخر تعديل بواسطة totysalah ، 15-09-2007 الساعة 03:57 PM |
|
#4
|
||||
|
||||
![]() لنبدأ بمثال في c++ من اجل طباعه جمله " you game programmer " فنحن بحاجه الي جمله التصريح وهي include والهيدر iostream والذي يحوي cout المختصه بالطباعه اذن صرحنا عن iostream من اجل استخدام المكونات التي بداخله وهي cout . في ال c# نفس النظريه تعمل مع ال Direct X فنصرح عنه او عن احدي مكوناته بأستخدام الجمله using ومن ثم جمله Microsoft وبعدها اسم ال namespace ( Direct 3d – Direct play – Direct sound - ….ect ) انظر المخطط بالاسفل :- ![]() يجب ان يبقي المخطط بذهنك للتصريح بأستخدام جمله حتي تصل للنهايه يبدأ انه يحتوي احد مكوناته Direct X وبعدها Microsoft وبعدها using وبعد ذلك classes والتي تحتوي علي properties ![]() ![]() سنقوم اولا بشرح كيفيه كتابه الخطوات و المصطلاحات نظريا ثو نصيغها برمجيا في اخر الشرح وسنكتب الكود كاملا بشكل Direct 3D و ال Direct X الخطوه الاولي ( التصريح ) كود:
using Microsoft.DirectX.Direct3D كود:
using Microsoft.Direct; الخطوه الثانيه : تقوم علي تجهيز Direct X ليتعامل مع كارت الشاشه من حيث ادراره وكيفيه التعامل معه يقوم ال Direct 3D بهذه الخطوه بأستخدام Class المسمي Present parameters و Class اخر مسمي Device . لنبدأ بال class الاول present parameter لل class عده خصائص منها ( property ) وهذه الخاصيه التي تحدد هل اللعبه ستعتمد علي windowed ام لا اي ان الفورم يجود بيه زر التكبير والتصغير اي عندما الشاشه تكون screen نعطيها القيمه false وعندما تكون full نعطيها true . Swap Effect : وهذه الخاصيه التي تحدد كيفيه اظهار الروسوميات علي الشاشه وتستخدم ثلاثه مصطلاحات وهي : كود:
SwapEffect.Flip ; وعند التكلم عن هذا المصطلح فمعناه ان كارت الشاشه يحوي مساحه كافيه لتخزين مشهدين معا او ثلاثه او اكثر علي حسب نوع كارت الشاشه اذا كانت البيكسل الكليه التي تدعمها كارت الشاشه هي 320*200 ستصبح المساحه الكليه اللازمه هي 2( 320*200 ) = 128000 حيث تنقسم ذاكره كارت الشاشه الي قسمين مرئي ( امامي ) وغير مرئي ( خلفي) تبدأ عمليه الرسم في صفحه القسم الغير مرئي شكل ( 1 ) وبعد الانتهاء تتبادل الصفحات لتصبح المعطيات مرئيه شكل (2 ) وبعده تتم عمليه تنظيف القسم الغير مرئي واعطاء بيانات جديده . ![]() مصلح ال Page Copying كود:
SwapEffect.Copy ; حيث تنقسم ذاكره كارت الشاشه الي قسمين مرئي ( امامي ) وغير مرئي ( خلفي) تبدأ عمليه الرسم في صفحه القسم الغير مرئي شكل ( 1 ) وبعد الانتهاءتنسخ من القسم الخلفي الي القسم الامامي شكل ( 2 ) وبعدها تتم عمليه تنظيف القسم الغير مرئي واعطاء بيانات جديده . ![]() مصطلح ال Discarding كود:
SwapEffect.Discard ; هذا المصطلح يقوم بجعل كارت الشاشه بتولي امر ترتيب واظهار الصفحات بصوره اليه وبدون تدخل المبرمج حيث يمتاذ هذا الخيار بالسرعه والدقه . خواص Auto Depth Stencil Format, Enable Auto Depth Stencil ويطلق علي هاتين الخاصيتين بالمصطلح Depth Buffer او ال Z Buffer او ال W Buffer وهي ذاكره العمق التي تحدد عمق الاشكال اي ان الجسم قريب يخفي الجسم البعيد انظر الي الشكل بالاسفل : ![]() خصائص Back Buffer Count, Back Buffer Format, Back Buffer Width, Back Buffer Height تستخدم هذه الخصائص من اجل عمليه التحكم في ال Buffer ( منطقه في الذاكره تخزن فيها البينات بشكل مؤقت ) من حيث العدد والطول والعرض والنوع . وكمثال لتوضيح الفكره عند البدء بالرسم بأستخدام ال Direct X يقوم الكمبيوتر بتخزين الاشكال بداخل البافر الخاص بالرام اي بداخ الكمبيوتر شكل ( 1 ) وعند الانتاء يقوم البرنامج بنسخ جميع الرسومات الي ذاكره البافر الخاص بكارت الشاشه شكل ( 2 ) ثم يقوم بتنظيف البافر الذي بالرام ليستقبل البيانات الجديده . ![]() المراد فهو يعتمد علي نوع كارت الشاشه لديك وكلما كبر ذاد عدد ال Buffer وكلما زادت سرعه معالجه البيانات وتأتي خاصيه Back Buffer Format لتحديد نوع ال Buffer حيث انه يفيد في حاله الرغبه بجع اللعبه Full screen وتأتي بعدها خاصيه تحديد الطول والعرض Back Buffer Width, Back Buffer Height ثانيا ال class المسمي ب Device تحدد هذا ال class كيفيه التعامل Direct X مع كارت الشاشه . 1- تحديد اي كارت شاشه سوف يستخدم نعلم ان هناك بعض الاجهزه تحتوي علي اكثر من كارت شاشه فيقوم الكمبيوتر بأعطائه IP والرقم 0 هو الرئيسي ليقوم بتحديد اي من الكروت سوف يستخدم ال Direct X ملاحظه : اذا كان جهازك بكات شاشه واحد فطبعا سيأخذ الرقم 0 كود:
Device (0, …, …, …,) 2- تحديد المكان الذي ستتم فيه معالجه وتوجد ثلاثه خيارات ال ( Software) اي ان جميع عمليات المعالجه ستتم في وحده المعالجه المركذيه CPU ال (Hardware) اي ان جميع عمليات المعاجه ستتم في كات الشاشه GPU ال (Reference) يستخدم هذا الخيار من اجل عمليه ال Debugging افضل هذه الخيارات هو ال CPU حيث سيعمل علي تخفيف العبئ عن الهاردوير كود:
Device ( 0, DeviceType.Haredware , …, …, …) ثالثا : تحديد الفورم الذي سيعمل Direct X ونستطيع الرسم عليه فنعبر عنه بكلمه this كود:
Device ( 0, DeviceType.Haredware , this, …, …) رابعا : تحديد المكان الذي ستتم فيه معالجه ال Vectors ( وهي النقاط التس تتم بواستطها رسم الاشكال ) وتوجد ثلاثه اختيارات : Software vertex progressing : تتم عمليه معالجه ال Vectors داخل المعالج ( CPU ) Hardware vertex progressing : تتم عمليه معالجه ال Vectorsبداخل كارت الشاشاه ويجب ان تكون هذه الكارت تدعم خاصيه ( GPU ) ولا لن تعمل اللعبه . Mixed vertex progressing : تتم عمليه معالجه ال Vectorsعن طريق CPU ولا ينصح عاده بأستخدام Hardware vertex progressing او Mixed vertex progressing لعدم معرفتنا اذ كان يدعم كارت الشاشه لي ام لا ونستطيع عمل كود للتحقق من استطاعتنا لأستخدام هذه الخواص ولكن سنتكلم عن تلك الامور في وقتها اما الان فسنستخدم Software vertex progressing كود:
Device ( 0, DeviceType.Haredware , this, software vertex progressing , …) خامسا : سنضع كائن ال Class وهي ال present parameter وهذا يعني ان جميع محتويات ال Class المسمي Device ( لفهم هذا الكلام يجب ان يكون لديك خلفيه بسيطه في OOP ) كود:
الكود كود:
Device ( 0, DeviceType.Haredware , this, software vertex progressing , object- presentparameters ) وسنصيغ جميع الكلام بالاعلي برمجيا :- كود:
Public void ondevice()
{
Presentparameters pp = new
Presentparameters ();
pp.windowd=true;
pp.swapEffect = swapEffect.Discard
pp.EnableAutoDepthstencilFormat = DepthFormat.D16;
device = new Device ( 0, DeviceType.Haredware , this, createFlags.software vertex progressing , pp );
}
ولا تقلق سنتكلم بالتفصيل عن مكان وضع الكود وطيفيه جعله يعمل بالتفصيل لاحقا لكن المهم الان هو فهم كل عنصر ووظيفته كما نري بالاعلي فقد قمنا بعمل داله اعطيناها اسم ondevice وتحتوي علي الدوال التس تكلمنا عنها Presentparameters و device ![]() ![]() الداله onpaint و الداله الرئيسيه main انتظرونا اترككم في رعايه الله وكل عام وانتم بخير ورمضان كريم أخر تعديل بواسطة totysalah ، 15-09-2007 الساعة 04:15 PM |
|
#5
|
||||
|
||||
|
جهود جبار بمعنى الكلمة أخى العزيزى totyslah
فبأسم جميع الاعضاء أحييك عليه و أشكرك كل الشكر و بداية موفقة بإذن الله و بغنتظار الدرس القادم فى أقرب وقت بإذن الله
__________________
![]() عن عبد الرحمن بن غنم الأشعري قال حدثني أبو عامر - أو أبو مالك - الأشعري والله ما كذبني : سمع النبي صلى الله عليه و سلم يقول ( ليكونن من أمتي أقوام يستحلون الحر والحرير والخمر والمعازف ولينزلن أقوام إلى جنب علم يروح عليهم بسارحة لهم يأتيهم - يعني الفقير - لحاجة فيقولوا ارجع إلينا غدا فيبيتهم الله ويضع العلم ويمسخ آخرين قردة وخنازير إلى يوم القيامة ) "مَنْ سن في الإسلام سنة حسنة، كان له أجرها وأجر من عمل بها من بعده، من غير أن ينقص من أجورهم شيئًا، ومَنْ سن في الإسلام سنة سيئة، كان عليه وزرها و وزرُ مَنْ عمل بها من بعده، من غير أن ينقص من أوزارهم شيئًا". |
|
#6
|
||||
|
||||
|
شكرا يا محمد علي مرورك الكريم وان شاء الله سيتم تنزيل باقي الدروس قريبا مازالت هذه البدايه |
|
#7
|
||||
|
||||
|
بجد انا مش لاقي حاجة اقولها ليك لانك متتوصفش
لاكن ربنا يكرمك
__________________
![]() ![]() ![]() ![]() ![]() ![]() |
|
#8
|
||||
|
||||
|
موضوع قمه فى الروعه
__________________
![]() ![]() |
|
#9
|
||||
|
||||
|
مجهود ممتاز وبالتوفيق إن شاء الله والإستمرارية فيه
__________________
سبحان الله وبحمده سبحان الله العظيم رئيس أركان حرب جمهورية المتفائلين زملكاوى رغم أنف الحاقدين ![]() ![]() |
|
#10
|
||||
|
||||
|
بجد موضوع رائع ...اشكرك كل الشكر على إفادتي بمعلومات لم اكن اعرفها من قبل
في إنتظار الدرس القادم إن شاء الله
__________________
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
#11
|
||||
|
||||
|
موضوع متتاز و ساتابعة يوميا باذن الله تعالا
و خاصة انى مبرمج بلغة c# طيب شغلنا كلة هيبقى notepad و لا استخدام ال compiler عادى
__________________
![]() |
|
#12
|
||||
|
||||
|
الف شكر يا باشا
__________________
|
|
#13
|
||||
|
||||
|
ده ايه الدلع ده بجد تسلم ايدك ياباااشا
الموضوع اكتر من هايل |
|
#14
|
||||
|
||||
|
شكرا يا مان بس في حاجة و متزعلش منها
أنت قعد تشرح أنواع و كيفية أستخدام DirectX أي كان ده حاجة متعبة و بتستهلك وقت على الفاضي أذا كان بمأكني أستخدام Free Library أو 3d Game engine مش أسهلي و أضمنلي لأن الحاجات دي ميستخدمهاش سوى Programmer For Deveolping Game Engines Only فأنا أيه ليخلني اتعب نفسي و أضيع وقتي مش أحسن أني أستثمرهم في تعلم برمجة Game Basics أحسن ولا أيه ده رأي و سمتني رأيك و دروس جاية يا باشا |
|
#15
|
||||
|
||||
|
woooow its reaaly fantastic thx
__________________
getting call of duty :modern warfare 2 assassin's creed 2 SOoOoOoOoN CENA ... ARE YOU READY اتشاوي متطرف ![]() HHH THE KING OF KINGS |
![]() |
| أدوات الموضوع | |
|
|