بسم الله الرحمن الرحيم
السلام على أحبتي أعضاء منتدى المنابر
أما بعد فنبدأ ومن الله التوفيق في الحفلة الأولى الراقصة على مفاتيح لوحة الإدخال بإيقاعات أنامل أعضاء المنتدى
وابتداءا أود أن أوضح بأنني سأذكر المصطلحات المستخدمة في برمجة الألعاب كما هي لا حبا بالانكليزية البغيضة ولكن مجارات لمبرمجي العالم ولكي يفهمها أعضاء المنتدى ولا يصطدموا فيها عندما يقرأوون مقالات على برمجة الألعاب كما إني سأحول أن أوضح هذه المصطلحات في سياق الكلام لذا كن منتبها
سنقوم في هذا الجزء من المشوار بتوضيح المفاهيم الهندسية المهمة والتي تعتبر أساس لبرمجة الألعاب وهذه المفاهيم ستناقش الأمور التالية
1-Vertices
2-Vectors
3-Planes
4-Matrices
5-Transformations
أما متطلبات الدرس فان الدرس يستلزم عليك أن تكون ملم بمبادئ برمجة الألعاب باستخدام ( Visual Basic ) الفيجوال بيسك و ( DirectX 8 ) دايركت اكس 8
أما من لم يكن على معرفة بما سبق فيمكنه متابعة الدرس ولكن يستلزم منه التركيز كما إني أوعده بأنه سأشرح تلك المبادئ في وقت لاحق ان شاء الله
والآن تعال لنبدأ بسم الله
1-Vertices
تمثل النقطة الأساس في تمثيل المجسمات في الفراغ ويمكن تمثيل أي نقطة من خلال إسناد قيم لمحصلات النقطة X, Y, Z وكمثال يمكنك أن تقول بان المقاتلة في لعبة فضائية في الموقع الفلاني المحدد عن طريق تحديد نقطة لموضعها
2-Vectors
المتجه وهو المسئول عن تحديد اتجاه ما في الفراغ - مثلا لتحديد اتجاه المقاتلة التي حددنا موقعها قبل قليل - والاتجاه الذي يمثله المتجه هو الاتجاه الناتج من التوجه من نقطة الأصل إلي النقطة المحددة وانتبه إلى مصطلح النقطة حيث أن المتجه والنقطة يعبر عنهم بثلاث محصلات ( X, Y, Z ) أما الاختلاف فهو في التسمية والذي سيحدد سلوك وطريقة التعامل مع هذه الإحداثيات ولفهم هذا الكلام فان
اتجاه المتجه ( 2,4,1 )
يساوي مثلا اتجاه المتجه ( 3,6,1.5 )
ويساوي اتجاه المتجه (0.4364358,0.8728716,0.2182179)
ولكن النقطة ( 2,4,1 )
لا تساوي مثلا النقطة ( 3,6,1.5 )
ولا تساوي النقطة (0.4364358,0.8728716,0.2182179)
ويمكنك تمثيل المتجه بالفيجوال بيسك من خلال النوع D3DVECTOR المضمن ضمن مكتبة الدايركت اكس حيث إن له المتغيرات X,Y,Z والخاصة بتمثيل كل محصلة على الإحداثي الخاص بها وكما يلي :
كما انك تلاحظ في الامثلة اعلاه بان طول المتجه الأول لا يساوي طول المتجه الثاني ولا طول المتجه الثالث ويمكنك معرفة طول المتجه رياضيا بواسطة قانون فيثاغورس أما بالفيجوال بيسك فيمكن عمل ذلك من خلال الدالة D3DXVec3Length وكما يلي :
والآن لاحظ أن الطول المتجه الأخير هو وحدة واحدة وهو ما يسمى بمتجه الوحدة وهو المتجه الذي يعبر عن الاتجاه فقط ( أي من غير تحديد اتجاه وطول لان طوله وحدة واحدة ) وللحصول على المتجه الوحدة الواحدة رياضيا فيمكنك من خلال تقسيم كل إحداثي من الإحداثيات على طول المتجه لتنتج المحصلات الثلاث الجديدة لمتجه الوحدة ويمكن الاستعانة بالدالة D3DXVec3Normalize لتعود بمتجه الوحدة من المتجه المرسل للدالة وكما يلي :
والان يجب ان تعرف ان هناك انواع اخرى من المتجهات منها الثنائي والرباعي والذي يمكن الحصول عنه برمجيا عن طريق النوعين التاليين
والان تعال لنتعرف على الضرب النقطي والضرب الشعاعي
الضرب النقطي :
وهو ضرب المتجه ليعطي نتيجة يمكن الحصول من خلالها على الزاوية المحصورة بين متجهين
وعلى فرض ان A و B متجهات فان الضرب النقطي سيمثل رياضيا من خلال
حيث ان |A| هو طول المتجه A
و |B| هو طول المتجه B
و theta هي الزاوية المحصورة بين المتجهين
كما ان الضرب النقطي يساوي مجموع حاصل ضرب محصلات المتجهين وكما يلي :
حيث ان Ax,Ay,Az محصلات المتجه A
و Bx,By,Bz محصلات المتجه B
وكما ترى فاننا رياضيا يمكننا الحصول على جيب تمام الزاوية المحصورة بين المتجهين من خلال العلاقة
اما بالنسبة عن كيفية الحصول على الضرب النقطي باستخدام دوال الدايركت اكس فيمكن ذلك من خلال الدالة D3DXVec3Dot وكما يلي
واخيرا بقي التنويه الى ان حاصل الضرب النقطي يساوي صفر اذا كانت الزاوية بين المتجهين المضروبين تساوي 90 وذلك بسبب الجيب تمام الموجود في القانون
ولهذا تعد هذه الطريقة طريقة فعالة في اختبار تعامد متجهين
والان وبعد معرفة اساسيات الضرب النقطي تعال لنتعرف على اساسيات الضرب الاتجاهي
أما بعد فنبدأ ومن الله التوفيق في الحفلة الأولى الراقصة على مفاتيح لوحة الإدخال بإيقاعات أنامل أعضاء المنتدى
وابتداءا أود أن أوضح بأنني سأذكر المصطلحات المستخدمة في برمجة الألعاب كما هي لا حبا بالانكليزية البغيضة ولكن مجارات لمبرمجي العالم ولكي يفهمها أعضاء المنتدى ولا يصطدموا فيها عندما يقرأوون مقالات على برمجة الألعاب كما إني سأحول أن أوضح هذه المصطلحات في سياق الكلام لذا كن منتبها
سنقوم في هذا الجزء من المشوار بتوضيح المفاهيم الهندسية المهمة والتي تعتبر أساس لبرمجة الألعاب وهذه المفاهيم ستناقش الأمور التالية
1-Vertices
2-Vectors
3-Planes
4-Matrices
5-Transformations
أما متطلبات الدرس فان الدرس يستلزم عليك أن تكون ملم بمبادئ برمجة الألعاب باستخدام ( Visual Basic ) الفيجوال بيسك و ( DirectX 8 ) دايركت اكس 8
أما من لم يكن على معرفة بما سبق فيمكنه متابعة الدرس ولكن يستلزم منه التركيز كما إني أوعده بأنه سأشرح تلك المبادئ في وقت لاحق ان شاء الله
والآن تعال لنبدأ بسم الله
1-Vertices
تمثل النقطة الأساس في تمثيل المجسمات في الفراغ ويمكن تمثيل أي نقطة من خلال إسناد قيم لمحصلات النقطة X, Y, Z وكمثال يمكنك أن تقول بان المقاتلة في لعبة فضائية في الموقع الفلاني المحدد عن طريق تحديد نقطة لموضعها
2-Vectors
المتجه وهو المسئول عن تحديد اتجاه ما في الفراغ - مثلا لتحديد اتجاه المقاتلة التي حددنا موقعها قبل قليل - والاتجاه الذي يمثله المتجه هو الاتجاه الناتج من التوجه من نقطة الأصل إلي النقطة المحددة وانتبه إلى مصطلح النقطة حيث أن المتجه والنقطة يعبر عنهم بثلاث محصلات ( X, Y, Z ) أما الاختلاف فهو في التسمية والذي سيحدد سلوك وطريقة التعامل مع هذه الإحداثيات ولفهم هذا الكلام فان
اتجاه المتجه ( 2,4,1 )
يساوي مثلا اتجاه المتجه ( 3,6,1.5 )
ويساوي اتجاه المتجه (0.4364358,0.8728716,0.2182179)
ولكن النقطة ( 2,4,1 )
لا تساوي مثلا النقطة ( 3,6,1.5 )
ولا تساوي النقطة (0.4364358,0.8728716,0.2182179)
ويمكنك تمثيل المتجه بالفيجوال بيسك من خلال النوع D3DVECTOR المضمن ضمن مكتبة الدايركت اكس حيث إن له المتغيرات X,Y,Z والخاصة بتمثيل كل محصلة على الإحداثي الخاص بها وكما يلي :
كود:
Dim v As D3DVECTOR
كود:
Dim v As D3DVECTOR With v .x = 2 .y = 4 .z = 1 End With Print "Length of (2,4,1) vector is : " & D3DXVec3Length(v) 'This WillShow Length of (2,4,1) vector is : 4.582576
كود:
D3DXVec3Normalize v, v 'This Will Make v=(0.4364358,0.8728716,0.2182179)
كود:
Dim v2 As D3DVECTOR2 Dim v4 As D3DVECTOR4
والان تعال لنتعرف على الضرب النقطي والضرب الشعاعي
الضرب النقطي :
وهو ضرب المتجه ليعطي نتيجة يمكن الحصول من خلالها على الزاوية المحصورة بين متجهين
وعلى فرض ان A و B متجهات فان الضرب النقطي سيمثل رياضيا من خلال
كود:
A.B = |A| |B| * Cos( theta )
و |B| هو طول المتجه B
و theta هي الزاوية المحصورة بين المتجهين
كما ان الضرب النقطي يساوي مجموع حاصل ضرب محصلات المتجهين وكما يلي :
كود:
A.B = AxBx + AyBy + AzBz
و Bx,By,Bz محصلات المتجه B
وكما ترى فاننا رياضيا يمكننا الحصول على جيب تمام الزاوية المحصورة بين المتجهين من خلال العلاقة
كود:
|A| |B| * Cos( theta )= AxBx + AyBy + AzBz اذا Cos( theta ) = (AxBx + AyBy + AzBz)/(|A||B|)
كود:
dotResult = D3DXVec3Dot(A, B)
ولهذا تعد هذه الطريقة طريقة فعالة في اختبار تعامد متجهين
والان وبعد معرفة اساسيات الضرب النقطي تعال لنتعرف على اساسيات الضرب الاتجاهي
تعليق