موضوع: Party 1 ( Vertices , Vectors and Matrices )

ردود: 9 | زيارات: 1611
  1. #1
    عضو نشيط
    صور رمزية X_Mind
    تاريخ التسجيل
    Sep 2005
    المنطقة
    العراق
    ردود
    325

    Lightbulb Party 1 ( Vertices , Vectors and Matrices )

    بسم الله الرحمن الرحيم


    السلام على أحبتي أعضاء منتدى المنابر

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

    سنقوم في هذا الجزء من المشوار بتوضيح المفاهيم الهندسية المهمة والتي تعتبر أساس لبرمجة الألعاب وهذه المفاهيم ستناقش الأمور التالية

    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
    كما انك تلاحظ في الامثلة اعلاه بان طول المتجه الأول لا يساوي طول المتجه الثاني ولا طول المتجه الثالث ويمكنك معرفة طول المتجه رياضيا بواسطة قانون فيثاغورس أما بالفيجوال بيسك فيمكن عمل ذلك من خلال الدالة D3DXVec3Length وكما يلي :


    كود:
     
    
    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 لتعود بمتجه الوحدة من المتجه المرسل للدالة وكما يلي :


    كود:
     
    
    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 )
    حيث ان |A| هو طول المتجه A
    و |B| هو طول المتجه B
    و theta هي الزاوية المحصورة بين المتجهين

    كما ان الضرب النقطي يساوي مجموع حاصل ضرب محصلات المتجهين وكما يلي :


    كود:
     
    
    A.B = AxBx + AyBy + AzBz
    حيث ان Ax,Ay,Az محصلات المتجه A
    و Bx,By,Bz محصلات المتجه B

    وكما ترى فاننا رياضيا يمكننا الحصول على جيب تمام الزاوية المحصورة بين المتجهين من خلال العلاقة

    كود:
     
    
    |A| |B| * Cos( theta )= AxBx + AyBy + AzBz
    
    اذا 
    
    Cos( theta ) = (AxBx + AyBy + AzBz)/(|A||B|)
    اما بالنسبة عن كيفية الحصول على الضرب النقطي باستخدام دوال الدايركت اكس فيمكن ذلك من خلال الدالة D3DXVec3Dot وكما يلي

    كود:
     
    
    dotResult = D3DXVec3Dot(A, B)
    واخيرا بقي التنويه الى ان حاصل الضرب النقطي يساوي صفر اذا كانت الزاوية بين المتجهين المضروبين تساوي 90 وذلك بسبب الجيب تمام الموجود في القانون
    ولهذا تعد هذه الطريقة طريقة فعالة في اختبار تعامد متجهين

    والان وبعد معرفة اساسيات الضرب النقطي تعال لنتعرف على اساسيات الضرب الاتجاهي
    العزة لله ولرسوله وللمؤمنين

    بسم الله الرحمن الرحيم

    (( يا ايها الذين امنوا ان تنصروا الله ينصركم ويثبت اقدامكم {7} والذين كفروا فتعسا لهم واضل اعمالهم {8} ذلك بانهم كرهوا ما انزل الله فاحبط اعمالهم {9} افلم يسيروا في الارض فينظروا كيف كان عاقبة الذين من قبلهم دمر الله عليهم وللكافرين امثالها {10} ذلك بان الله مولى الذين امنوا وان الكافرين لا مولى لهم {11}))

    سورة محمد ( صلى الله عليه وسلم )


    Simply I'm not designer,I'm just programmer


    X-Team::X-Mind


    اخوكم محمد العاني


  2. #2
    عضو نشيط
    صور رمزية X_Mind
    تاريخ التسجيل
    Sep 2005
    المنطقة
    العراق
    ردود
    325
    الضرب الاتجاهي :

    على خلاف الضرب النقطي الذي ينتج قيمة واحدة تمثل حاصل ضرب طولي المتجهان المضروبان مع جيب تمام الزاوية المحصورة بينهم فان الضرب الاتجاهي سيولد متجه جديد يحسب حسب قاعدة الكف اليسرى ( حسب النظام الافتراضي لفضاء برمجة الالعاب ويمكنك مراجعة المقال DirectX Graphics >> Programmers Guide >> Using Direct3D >> 3-D Coordinate Systems and Geometry >> 3-D Coordinate Systems في SDK ) اما قيم محصلات المتجه الجديد فتحسب رياضيا كما يلي

    كود:
     
    
    R = A X B
    where
    Rx = AyBz - AzBy Ry = AxBz - AzBx Rz = AxBy - AyBx
    واما كيفية حساب المتجه الناتج عن الضرب الاتجاهي لمتجهين باستخدام دوال الدايركت اكس فاننا نستخدم الدالة D3DXVec3Cross فيمكن تمثيل ما سبق باستخدام هذه الدالة كما يلي

    كود:
     
    
    D3DXVec3Cross R, A, B
    حيث ان اول مدخل يمثل المتغير - تعبير مجازي عن الصنف D3DVECTOR - الذي ستسند اليه قيمة الناتج من الضرب الاتجاهي اما المتغيران الباقيان فهما المتجهان الذان سيتم اجراء الضرب عليهم ابتداءا من اليسار الى اليمين وانتبه فان تسلسل ضرب المتجهات سيؤثر على اتجاه المتجه الناتج

    واخيرا اما بالنسبة لاهمية الضرب الاتجاهي فهو مهم في تعيين المستوي الناتج من متجهين متقاطعين
    كما انه يستخدم في تحديد اعمدة النقاط المستخدمة في عملية الاضاءة ( يمكنك مراجعة المقال DirectX Graphics >> Programmers Guide >> Using Direct3D >> 3-D Coordinate Systems and Geometry >> Face and Vertex Normal Vectors)

    والان تعال لنتعرف على المستويات Planes
    العزة لله ولرسوله وللمؤمنين

    بسم الله الرحمن الرحيم

    (( يا ايها الذين امنوا ان تنصروا الله ينصركم ويثبت اقدامكم {7} والذين كفروا فتعسا لهم واضل اعمالهم {8} ذلك بانهم كرهوا ما انزل الله فاحبط اعمالهم {9} افلم يسيروا في الارض فينظروا كيف كان عاقبة الذين من قبلهم دمر الله عليهم وللكافرين امثالها {10} ذلك بان الله مولى الذين امنوا وان الكافرين لا مولى لهم {11}))

    سورة محمد ( صلى الله عليه وسلم )


    Simply I'm not designer,I'm just programmer


    X-Team::X-Mind


    اخوكم محمد العاني

  3. #3
    عضو نشيط
    صور رمزية X_Mind
    تاريخ التسجيل
    Sep 2005
    المنطقة
    العراق
    ردود
    325
    3-planes

    ان المستويات من اهم العناصر في الفضاء الثلاثي ويمكن فهم المستوي على هيئة صفيحة وهمية لها حدود في اللانهائية كما ان لها اتجاه

    والان وبعد التفكير في كيفية تمثيل المستوي في الفضاء ستجد اننا يمكن تحديد اتجاه المستوي بتحديد متجه وحدة يعبر عن الاتجاه فقط

    اما بالنسبة لموضعه فيتم تحديده ببعده عن نقطة الاصل لذا اصبحت لدينا اربع محصلات لتمثيل المتجه الثلاث الاولى تمثل متجه الوحدة الذي يصف اتجاه المتجه والرابعة فتمثل بعد المستوي عن نقطة الاصل

    ويمكنك تمثيل المستوي برمجيا من خلال الصنف D3DPLANE الذي يملك الهيكل التالي

    كود:
    Type D3DPLANE
        a As Single        
        b As Single       
        c As Single        
        d As Single        
    End Type

    حيث تمثل a و b و c المحصلات الثلاث لمتجه الوحدة الذي يصف الاتجاه اما الـ d فيمثل بعد المستوي عن نقطة الاصل

    والان بقي ان تعرف ان بالامكان انشاء مستوي بطريقة من طريقتين وهي

    اولا : باستخدام ثلاث نقاط من خلال الدالة D3DXPlaneFromPoints
    ثانيا : من متجه ونقطة باستخدام الدالة D3DXPlaneFromPointNormal

    ولمعرفة معلومات اكثر عن هذه الدول قم بالبحث عنها في ال SDK

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





    العزة لله ولرسوله وللمؤمنين

    بسم الله الرحمن الرحيم

    (( يا ايها الذين امنوا ان تنصروا الله ينصركم ويثبت اقدامكم {7} والذين كفروا فتعسا لهم واضل اعمالهم {8} ذلك بانهم كرهوا ما انزل الله فاحبط اعمالهم {9} افلم يسيروا في الارض فينظروا كيف كان عاقبة الذين من قبلهم دمر الله عليهم وللكافرين امثالها {10} ذلك بان الله مولى الذين امنوا وان الكافرين لا مولى لهم {11}))

    سورة محمد ( صلى الله عليه وسلم )


    Simply I'm not designer,I'm just programmer


    X-Team::X-Mind


    اخوكم محمد العاني

  4. #4
    عضو نشيط
    صور رمزية X_Mind
    تاريخ التسجيل
    Sep 2005
    المنطقة
    العراق
    ردود
    325
    4-Matrices & 5-Transformation

    تمثل المصفوفات اساس لتحريك وتدوير وتحجيم المجسمات من خلال تطبيق اي تحويل نقطي تحمله المصفوفة على نقاط المجسم

    وانا هنا لست بصدد ان اشرح جبر المصفوفات ولكن ساكتفي بتوضيح بعض النقاط

    وفي بداية النقاط التي اود ان اوضحها هو اننا في الدايركت اكس سنستخدم مصفوفة 4 4X وذلك لانها تدعم التحويلات النقطية على المتجهات الثلاثية التي تعد اساس اما المتجهات الثنائية والرباعية فيمكن تحويلها الى متجهات ثلاثية واجراء التحويل النقطي عليها ومن ثم اعادتها

    واما الصنف الخاص لتمثيل المصفوفة فهو الصنف D3DMATRIX الذي يملك 16 متغير تمثل عناصر المصفوفة الرباعية

    وبالنسبة للمبتدئين فيمكنك تطوير قدرات في جبر المصفرفات والتحويلات من خلال قراءة كتب مختصة اما بالنسبة للبرمجة فان مكتبة دايركت اكس ستقوم باجراء كل تحويل نقطي لك ولا عليك الا استدعاء الدوال الخاصة بالمصفوفات

    والان وقبل عرض الدوال الخاصة بالمصفوفات فينبغي عليك معرفة انه يمكن جمع اكثر من تحويل نقطي من خلال ضرب المصفوفات الخاصة بتلك التحويلات لتنتج مصفوفة اخيرة تجمع كل التاثيرات

    فلو كان لدينا مصفوفة تقوم بتدوير نقطة ومصفوفة لتحريكها فيمكن انتاج مصفوفة واحدة تجمع تاثير المصفوفتين من خلال ضرب المصفوفتين

    اما دوال المصفوفات فهي

    كود:
     
    
    للحصول على المصفوفة المحايدة D3DXMatrixIdentity(MOut As D3DMATRIX)
    لضرب مصفوفتين D3DXMatrixMultiply(MOut As D3DMATRIX,M1 As D3DMATRIX,M2 As D3DMATRIX)
    للحصول على مصفوفة تحجيم بقيم X,Y,Z D3DXMatrixScaling(MOut As D3DMATRIX,x As Single,y As Single,z As Single)
    للحصول عل مصفوفة تحريك على الحداثيات الثلاث D3DXMatrixTranslation(MOut As D3DMATRIX,x As Single,y As Single, z As Single)
    للحصول على مصفوفة دوران حول اتجاه معين D3DXMatrixRotationAxis(MOut As D3DMATRIX,VAxis As D3DVECTOR, angle As Single)
    للحصول على مصفوفة دوران حول المحور X D3DXMatrixRotationX(MOut As D3DMATRIX,angle As Single) كما يمكن استخدام نفس الدالة للدوران حول الـYو Z بابدالهم بدلا من الـ X
    والان قد اكملت شرح مبسط جدا على العناصر الهندسية للعالم الثلاثية وهذا الدرس قابل للتطوير ولكن هذه الاساسيات تكفي حاليا لكي ندخل في بناء تطبيقات مبسطة لانتاج الالعاب حيث سيمثل هذا الموضوع مرجع بسيط يتم الرجوع اليه في حال ملاقاة اي شيء مبهم اثناء شرح درس البرمجة وخصوصا للمبتدئين

    والان اترك السؤال لمن يملك السؤال حول موضوع الهندسة الثلاثية
    العزة لله ولرسوله وللمؤمنين

    بسم الله الرحمن الرحيم

    (( يا ايها الذين امنوا ان تنصروا الله ينصركم ويثبت اقدامكم {7} والذين كفروا فتعسا لهم واضل اعمالهم {8} ذلك بانهم كرهوا ما انزل الله فاحبط اعمالهم {9} افلم يسيروا في الارض فينظروا كيف كان عاقبة الذين من قبلهم دمر الله عليهم وللكافرين امثالها {10} ذلك بان الله مولى الذين امنوا وان الكافرين لا مولى لهم {11}))

    سورة محمد ( صلى الله عليه وسلم )


    Simply I'm not designer,I'm just programmer


    X-Team::X-Mind


    اخوكم محمد العاني

  5. #5
    مشرف منبر 3D Games Design
    صور رمزية oms
    تاريخ التسجيل
    Oct 2004
    المنطقة
    Turkey
    ردود
    6,683
    والله الله يعطيك العافية ..

    أخوي بس كان عندي كم إستفسار .

    - المعلومات التي تقدمها لنا .. بالجانب إلى خبرتك فيه . ما هو المصدر الثانوي اللذي تستخدمه .. بمعنى .. ماذا تنصخنا أن نقرأ لنكمل في هذا المجال ؟
    - الفيرجوال بيسك 6 . هل يقبل مكتبات الدايركت إكس 9 سي ؟؟
    - المتجهات الثنائية والثلاثية معروفة ... ولكن ماهي المتجهات الرباعية ؟؟
    - 3 -planes هل تقتصر حصرياً على البلين الى المالانهاية ؟؟

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

  6. #6
    عضو نشيط
    صور رمزية X_Mind
    تاريخ التسجيل
    Sep 2005
    المنطقة
    العراق
    ردود
    325
    اخي العزيز انا ذكرت هذه المعلومات لما واجهته في بداية مشواري الهندسي من متاعب في الرياضيات حيث ان برمجة الالعاب تتطلب رياضيات متقدمة

    وكانت في البداية من اصعب الامور التي واجهتها وذلك لقلة التطرق لها في المنتديات العربية ولكن وبعد فترة اشتريت كتاب رائع للاخ المهندس بنكين مصطفى ( بعنوان برمجة الالعاب ثلاثية الابعاد باستخدام دايركت اكس 9 للمبتدئين - دار الشعاع ) حيث ان فيه مقدمة ممتازة باسم مواضيع رياضية مهمة وبالمناسبة فانا انصح الكل بشراء هذا الكتاب لانه والله مصدر مهم كما انه والحمد لله فخر للمبرمجين العرب كما ان اغلب خبرتي جاءت من هذا الكتاب فهو يتطرق للمواضيع بشكل ملخص وما عليك الا ان تكمل البحث عنها لتزيد خبرتك فيها

    اما المصادر الاخرى فيمكنك العودة لكتب الرياضيات البحتة فانا قراءت ثلاث كتب في جامعتي عن الرياضيات ومنها كتاب calculus- واعذروني ان كان املاءه خطا ولكنه كتاب معروف -

    اما بالنسبة للسؤال الثاني لا اخي الفجوال بيسك 6 لا يدعم الدايركت اكس 9 اما الفجوال بيسك دوت نت اخي فانه يدعم دايركت اكس 9

    ولكن في المقابل فانه لايوجد فرق كيبر بين الدايركت اكس 9 و 8 لا يؤثر بالنسبة لمبرمجينا وذلك لان الفرق هو فرق احترافي حيث ان الدايركت اكس 9 يحوى على طريقة جديدة للتظليل تسمى لغة التظليل العالية HLSL

    اما بالنسبة للمتجهات الرباعية فتسمى المتجهات المتجانسة ولها استخدام في التحويلات النقطية فلو اردت مثلا ان تقوم بتحول متجه ثلاثي - كان تكون محصلاته محصلات متجه او محصلات لنقطة - باستخدام مصفوفة التحويل الثلاثية فانك لن تستطيع ان تغيير مكانه وسيقتصر التحويل على الدوران والتقييس وذلك لان التحويل سيفرض ان التاثير التحويل سيكون على متجه والمتجه لا يمكن تغيير مكانه لانه لايصف مكان بل يصف اتجاه من اي مكان فلذلك وجب علينا استخدام مصفوفة تضم المعلومات الفراغية للمتجه - يعني هل هو متجه ام نقطة - اذا اردنا تحويل نقطة ومن هنا تبرز اهمية المحصلة W والتي تصف هل ان المحصلات X,Y,Z هي لنقطة ام لمتجه فالW=0 للمتجه والW=1 للنقطة

    اما بالنسبة لل Planes فلم افهم معنى سؤالك ولكن بصورة عامة فان الPlanes يستخدم في عمليات الانعكاس والمرايا ( موضوع التقنيع في الكتاب برمجة الالعاب ثلاثية الابعاد باستخدام دايركت اكس 9 للمبتدئين ) كنا انه يستخدم لضبط التصادم ووو كثير من الامور التي تصادفك في عالمك الثلاثي

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

    كما اني سابدا ان شاء الله بدرس لتاسيس بيئة برمجية للعبة ثنائية ( شبه محرك ) والذي سيعتمد على المعلومات الموجودة في هذا الموضوع ان شاء الله

    ومن الله التوفيق
    العزة لله ولرسوله وللمؤمنين

    بسم الله الرحمن الرحيم

    (( يا ايها الذين امنوا ان تنصروا الله ينصركم ويثبت اقدامكم {7} والذين كفروا فتعسا لهم واضل اعمالهم {8} ذلك بانهم كرهوا ما انزل الله فاحبط اعمالهم {9} افلم يسيروا في الارض فينظروا كيف كان عاقبة الذين من قبلهم دمر الله عليهم وللكافرين امثالها {10} ذلك بان الله مولى الذين امنوا وان الكافرين لا مولى لهم {11}))

    سورة محمد ( صلى الله عليه وسلم )


    Simply I'm not designer,I'm just programmer


    X-Team::X-Mind


    اخوكم محمد العاني

  7. #7
    مشرف منبر 3D Games Design
    صور رمزية oms
    تاريخ التسجيل
    Oct 2004
    المنطقة
    Turkey
    ردود
    6,683
    جزاك الله خيراً على التوضيح ,...

    بارك الله فيك .

  8. #8
    بارك الله فيك

    شكرا الك

  9. #9
    عضو نشيط
    صور رمزية lugia 50
    تاريخ التسجيل
    Aug 2007
    المنطقة
    الإمارات ___________ العين
    ردود
    696
    جزاك الله خير أخوي و بارك الله فيك


Bookmarks

قوانين الموضوعات

  • لا يمكنك اضافة موضوع جديد
  • لا يمكنك اضافة ردود
  • لا يمكنك اضافة مرفقات
  • لا يمكنك تعديل مشاركاتك
  •  
  • كود BB مفعّل
  • رموز الحالة مفعّل
  • كود [IMG] مفعّل
  • [VIDEO] code is مفعّل
  • كود HTML معطل