تمهيد :كنت أنوي العمل مباشرة على لعبة صغيرة وشرحها هنا ولكن قبل البدء في العمل على أي شئ, يجب أن أوضح بعض الأشياء المتعلقة بالعالم الثلاثي الأبعاد ... بطريقة بسيطة, لن نتكلم بالتفصيل ... هذه الأشياء ضرورية لفهم كيفية التعامل مع العوالم ثلاثية الأبعاد .... حسناً, فلنبدأ ....
(س ص ع) (X Y Z) : المحاور الثلاث ..... هكذا سنرمز للأبعاد الثلاثة في الفراغ "الثلاثي الأبعاد" .... قد يتبدّل القصد من كل رمز على حسب التطبيق الذي تستعمله ..... فعلى سبيل المثال ... الارتفاع في اليونتي يرمز له بـ"ص , Y" , في حين يرمز له بـ"ع , Z" في 3D Studio Max ....على أي حال ... سنستفيد من هذه الرموز في تحديد الاتجاهات التي قد نرغب أن يتحرك فيها الجسم .... وهذا ينقلنا لنقطة أخرى ... "المتجهات" .
(أ.1) |
(أ.2) |
(المتجهات) (Vectors) : في الفضاء الثنائي الأبعاد ... على ورقة مثلاً .... إذا أردت تحديد اتجاه فيجب على الأقل أن تعرف نقطتين .... وإذا كان عندك إطار مرجعي فيجب أن تعرف نقطة واحدة على الأقل .... كما في الرسم التوضيحية (أ.1) .... نفس الطريقة نتبعها في المتجهات الثلاثية الأبعاد .... عليك أن تعرف نقطتين في الفراغ على الأقل ... أو نقطة واحدة إذا كان لديك إطار مرجعي .... في حالتنا مع اليونتي فغالباً سيكون هناك إطار مرجعي ونقطة أصله هي (0,0,0) سواء كان الإطار المرجعي محلّي -Local أوشامل - Global .... وسنفهم القصد من هؤلاء لاحقاً ولكن الآن فلنضرب مثالاً لمتجه في الفراغ الثلاثي الأبعاد .... المتجه الثلاثي يُرمز له بـ Vector3 في البونتي ...و لهذا إذا أردنا مثلا أن نحرك جسم ما عمودياً للأعلى فسيكون متجه الوحدة له هكذا :
Vector3(0.1.0)
وهكذا مع بقية الاتجاهات .... ماذا لو أن يتحرك الجسم في اتجاه زاوية معينه ؟! ... 45 درجة مثلاً على الأرض .... للقيام بهذا علينا أولا تجاهل بعد الارتفاع "ص - Y في هذه الحالة" ...لأن الحركة ستكون في مستوى الأرض "أفقي" .... ولأن ظل الزاوية 45 يساوي 1 .... فهذا يعني أن كلا من "س و ع - X,Z" قيمتهم تساوي واحد لنقطة تقع على هذا المتجه وتتقاطع مع دائرة قطرها الوحدة .... والنتيجة ستكون كالآتي :-
Vector3(1,0,1)
إذا كان هناك شئ غير مفهوم في موضوع المتجهات فربما عليك مراجعة كتب خارجية في هذا الموضوع والتي قد تساعدك أكثر في توظيف المتجهات بشكل أفضل في لعبتك كفهم كيفية الضرب الاتجاهي والقياسي ..إلخ من المواضيع المرتبطة, أو انتظر فسنتعرّض للموضوع كثيراً خلال هذه السلسلة ..
الأسطح في الفراغ الثلاثي الأبعاد : فلنتخيل معاً شكل بسيط كالمكعب, به ستة أسطح, ياترى كيف يتم التعبير عن هذه الأسطح في العالم الثلاثي الأبعاد ؟! .... تعال نحلل هذا المكعب ببساطة .... يوجد في هذا المكعب ستة "أسطح/مضلعات - Polygons" كما ذكرنا مسبقاً ... وكل سطح/مضلع يوجد به "وجه - Face" ....هنا يخلط الكثيرون بين الوجه والسطح .... يتعامل الحاسب بطريقة مختلفة مع الفراغ الثلاثي الأبعاد عن ماهي موجود في الواقع ... فلكل سطح وجه واحد تستطيع النظر من خلاله ... فإذا نظرت من خلف هذا الوجه مثلاً لن تتمكن من رؤيته .... وهذا يعني أن السطح هو الهيكل مثلاً .... وأن الوجه هو المتجّه الذي سيظهر فيه هذا السطح .... وهنا نأتي لتعريف شئ آخر وهو العموديات - Normals .... وهو المتجه العمودي على الوجه "عمودي على الوجه فقط ولكن يمكنك تغير اتجاهة بالنسبة للسطح وعندها تحصل على اتجاه آخر للوجه"... وهو الذي يحدد كيف سيظهر السطح بالنسبة للإضاءة مثلاً ... هناك شئ آخر وهو "النقاط - Vertices" ... النقاط تحدد لك قمم الأسطح/المضلعات ... ويمكنك تحريكها في الفضاء لتغير من شكل المجسم كما يحلو لك .... وعند إيصال نقطتين ينتج لنا ما يسمّي "الحرف-Edge" ..... انظر لهذه الرسم فستساعدك على فهم الموضوع :-
والآن ... ماذا لو أردنا إعطاء هذا المكعب لوناّ ؟!! أوأردنا أن نرسم عليه صورة ليبدو كصندوك مثلاً .... سنقوم بتطبيق خامة - Material على كل وجه ... لينتج الشكل المطلوب ....
حسناً , هذه كانت مجرد نبذة عن الأساسيات ... عليك أنت أن تبحث في الموضوع أكثر .... والآن فلننتقل لنقطة أخرى .... وهي نبذة أخرى ولكن هذه المرة عن أساسيات البرمجة, سأشرح بعض المفاهيم بإيجاز .... وأنت عليك الباقي :-
متغيّر - Variable : فلنأخذ على سبيل المثال محفظتك .... كم من النقود بها الآن ؟! .... أنا مثلاً الآن محفظتي بها 4 جنيهات O_O" .... ولكن منذ أربع ساعات فقط كان بها 50 جنيهاً ..... والآن فلنعتبر محفظتي هذه عنوان "المتغيّر" .... والقيمة التي بها هي الجنيهات التي تتغير .... وبهذا فعندنا متغيّر من نوع "جنيهات" واسمه "محفظتي" .... يمكننا الآن أخذ هذا المتغير وطرح بعض الجنيهات منه لشراء العلكة مثلاً ... أو دفع أجرة المواصلات ...... وهكذا ..... إذا أردنا التعبير عن هذا في اليونتي مثلاً ... فلنفترض أن في اليونتي نوعاً من المتغيرات يدعى "EP" أي جنيهات مصرية .... فإذا أردنا حجز متغير باسم "محفظتي" من نوع "EP" فسيكون كالآتي :-
var myPocket : EP ;فـ "var" هي إختصار لـ Variable ... وهذه بالضبط الطريقة التي تعلن بها عن متغير في اليونتي .... وضّح أولاً أنك تريد أن تعلن عن متغير بكتابتك var في أول السطر ... وبعدها اكتب اسم المتغير وهو myPocket ..... وبعدها ":" .... ثم بعدها وضّح نوع المتغير وهو هنا على سبيل المثال EP .... ثم تخبر اليونتي بأنك انتهيت بأن تضع ";" وهي ضرورية وقد تسبب لك مشاكل لو لم تهتم بوضعها ...
دالة - Function : فلنكتفي للآن بتعريفها على أنها مجموعة من الأوامر التي يمكن تفيذها أكثر من مرة ....
الفصائل والعناصر - Classes & Objects: ربما من درس بعض الفلسفة ومنطق التصنيفات لن يجد مشكلة في فهم فكرة الفصائل ..... فلنأخذ مثالاً من الطبيعة .... البشر مثلاً ... فهذه فصيلة .... فالبشر كلهم لهم خصائص مشترك تستطيع من خلالها التعرف عليهم ... ولكن أنا وأنت لنا خصائص تميزنا عن بعضنا البعض ... فأسمائنا وملامحنا مختلفة مثلاً ..ولكن لازلنا بشر ... هذه بالضبط هي العلاقة بين الفصل والعنصر .... فالعنصر يحتوي على خصائص الفصل والتي تميزه عن الفصائل الأخرى ... ولكن مع ذلك فليست كل عناصر هذه الفصر متشابها ... فهي تختلف وتتغير في خصائصها المندرجة تحت هذا الفصل .... إذا لم تفهم شيئاً من هذا الكلام الآن فلا عليك ... سنتطرق لها لاحقاً أيضاً بتفصيل أكثر .... ولمن يريد القراءة أكثر فعليه بفهم مبادئ "البرمجة الموجّهة للكائنات" - "Object Oriented Programming" ....
حسناً .... يكفي ما تطرقنا له الآن من أساسيات ... الباقي سيأتي مع التطبيق.... في المرة القادمة سنبدأ في صناعة لعبة صغيرة باليونتي .... هذه المرة أوعدكم P=
ليست هناك تعليقات:
إرسال تعليق