صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 16

الموضوع: موضوع لمناقشة التصادم في Directx

  1. #1
    التسجيل
    20-08-2004
    المشاركات
    29

    موضوع لمناقشة التصادم في Directx

    السلام عليكم
    في الحقيقة هذا الموضوع استفسار عن كيفيت صناعة تصادم باستخدام كلاً من visual Basic 6 و الــ Directx7
    اول شي للتصادم يجب انك تحدد موقع المجسم
    استخدمت خاصية SetPosition لتحديد موقع الجسم باستخدام الكود التالي
    Mesh1.SetPosition scene, 20, -20, 50
    ثانياً استخدمت الكود التالي لعمل التصادم
    if Mesh1.SetPosition >= Mesh2.SetPosition Then Mesh1.SetPosition scene, 10, 20, 40
    لكن للاسف تطلع رالة تقول الخاصيه SetPosition ليست اختيارية.

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


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


    فاالرجاء مساعدتي في عمل ذلك ان أمكن

  2. #2
    التسجيل
    21-02-2003
    الدولة
    الإمارات العربية المتحدة
    المشاركات
    2,350

    رد: موضوع لمناقشة التصادم في Directx

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

    اعتقد يزيد يستطيع ان يساعدك ...

  3. #3
    الصورة الرمزية RAAAAD
    RAAAAD غير متصل عضو مميز في منتدى البرمجة
    التسجيل
    09-09-2005
    المشاركات
    63
    نفرض أن لدي دائرتان وهما c1 و c2 ولدي كل واحدة إحداثيات هم x, y, z في حالة ثلاثي الأبعاد ... و x,y في حالة ثنائي الأبعاد ..
    r1 يمثل نصف القطر لي c1
    r2 يمثل نصف القطر لي c2

    ===========

    فستكون لدي المعادلة الخاصة بالتصادم هي

    كود:
    ||c2-c1|| <= r2+r1

    ===========



    نقوم أولاً بطرح الـ vectors للدائرتان وهما c2 – c1 ونضع النتيجة بي الـ vector المسي u .. ومن ثم نحسب الـ Normalization له ... لعمل خط مستقيم بين الجسمين ...

    وبواسطة جمع أنصاف الأقطار .. نستطيع معرفة هل الدائرنات تقاطعا .. إم لا


    كود:
     
    Vector3 Vector3::operator-(Vector3& rhs)
    {
    //step 1
        Vector3 u;
        u.mX = mX - rhs.mX;
        u.mY = mY - rhs.mY;
        u.mZ = mZ - rhs.mZ;
     
    //step 2
    sqrtf(uX*uX + uY*uY + uZ*uZ);;
     
     
    //step 3
     
        float len;
     
        mX /= len;
        mY /= len;
        mZ /= len;
     
        return u;
     
    }
     
     
    

  4. #4
    الصورة الرمزية RAAAAD
    RAAAAD غير متصل عضو مميز في منتدى البرمجة
    التسجيل
    09-09-2005
    المشاركات
    63

    رد: موضوع لمناقشة التصادم في Directx

    كود:
     
    visual Basic 6 و الــ Directx7
    هل يدعم الـ vb الـ DirectX 9

    إذا كان يدعم النسخة السابعة فأنا أنصحك بالأنتقال إليها ... لأنها أفضل وأسهل ...

  5. #5
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

    رد: موضوع لمناقشة التصادم في Directx

    هنا

    بالتوفيق
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  6. #6
    التسجيل
    20-08-2004
    المشاركات
    29

    رد: موضوع لمناقشة التصادم في Directx

    أشكر الجميع
    بالنسبة للاخ Son Of UAE
    في الحقيقة جربة GetPosition بس مانفع

    اما الاخ RAAAAD
    فشكر اً لشرحك بس الشرح علي c++
    والــ vb لا يدعم الDirectX 9


    والاخPRG of RPG
    فشكراً لك بس والله مافهمت شيء


  7. #7
    الصورة الرمزية RAAAAD
    RAAAAD غير متصل عضو مميز في منتدى البرمجة
    التسجيل
    09-09-2005
    المشاركات
    63

    رد: موضوع لمناقشة التصادم في Directx

    شوف إذا كان directx 7 يدعم حساب الـ normlization vector فتستطيع حساب التصادم عن طريق الدالة setnormal ...

    جرب هذا الكود

    كود:
     
    if Mesh1.setnormal >= Mesh2.setnormal Then Mesh1.SetPosition scene, 10, 20, 40

    أو شئ قريب لهذا ..

  8. #8
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

    رد: موضوع لمناقشة التصادم في Directx

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

    او اجعل المجسم محاط بكرة او مكعب اذا كان التصادم في ثلاثة ابعاد
    في موقعي عرضت طرق التصادم 2D ،،، عموماً الشائعة الإستخدام هي Rect و Circle و pixel للتودي

    أما الثري دي فالشائعة هي Sphere و Box و Face زي ما تفضلت أخوي

    أبعرض هنا طريقة 2D Rectangle Collision عشان فكرة التصادم واضحة :

    هذي الخمس حالات الأساسية لأي مجسمين A و B :



    كود:
    الحالة 1
    المجسمين غير متصادمين
    الحالة 2 و 3 : توضحان متى يحدث التصادم الأفقي:
    المجسين متصادمين لأن:
    B.Right > A.left & A.Right > B.Left
    الحالة 4 و 5 : توضحان متى يحدث التصادم العامودي:
    المجسين متصادمين لأن:
    B.Buttom > A.Top & A.Buttom > B.Top
    
    وإذا حدث هذين الشرطين معاً يحدث التصادم
    *قارن الكود بالصورة*
    هذه كيفية إكتشاف التصادم بطريقة 2D Rectangle Collsion والطرق كثيرة، على حسب الحاجة

    وبالنسبة لطرق الثري دي أعقد من التو دي بس بالنهاية راح تكون داخل كلاس مغلفة وبعد فترة يمكن تنسى كيف سويتها -.-

    أتمنى فكرة التصادم وضحت ،،، والآن نحتاج منك إنك تحطنا في الصورة :

    1- تو دي ولا ثري دي
    2- نوع التصادم
    3- شغال على محرك ولا على DirectX7 مباشرة

    أول شي أقدر اقوله لك أنها GetPosition اللي تحتاجها لأنك ماتبي تغير مكان المجسم (SetPosition) بل تريد أن تعرف مكانه (GetPosition)

    ملاحظة: للأسف أنا وضعت الرابطة للنسخة الإنجليزية ، هنا النسخة العربية
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  9. #9
    التسجيل
    20-08-2004
    المشاركات
    29

    رد: موضوع لمناقشة التصادم في Directx


    الاخPRG of RPG

    التصادم ثري دي
    انا اشتغل على DirectX7 مباشرة


  10. #10
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

    رد: موضوع لمناقشة التصادم في Directx

    بالنسبة للثري دي DX7 ما انصحك تشتغل عليه بالمرة

    إذا إنت حاب الVisual Basic إشتغل على Visual Basic.Net - DirectX9

    الشغل عليه أسهل بكثير من DirectX7-VB6 وأمتع.... عموماً هذا ماهو الموضوع

    __________________

    بالنسبة للثري دي عندنا Box و Sphere و Face طرق لإكتشاف التصادم

    أسهلها بالطبع Sphere وهي تشبة تماماً 2D Circle Collision فقط ضيف البعد Z في المعادلة

    لنفرض أن لدينا مجسم A و مجسم B

    والآن يجب أن نوجد الجسم المحيط Boundry للمجسمين وهو في حالتنا هذه الكره

    كره تغلف المجسم A و كرة أخرة تغلف المجسم B ....

    أنظر الصورة

    ستجد نوعين من الBounders :
    1- Sphere حتى نستخدم Sphere Collision ...
    2- Box حتى نستخدم Box Collision ...

    وحتى توجد الSphere Bounder لمجسم تحتاج الCenter في الغالب هي الOrigin وتحتاج الRadius فقط لاغير
    وهي عملية إحصائية لجميع نقاط المجسم...

    الآن لدينا Sphere Bounder للمجسم A و SphereBounder للمجسم B
    المسافة بين الBounders عملية رياضية بسيطة : تأخذ المتجة بين المركزين ثم تحسب طول هذا المتجة
    ثم تقارن ما اذا كان طول المسافة أكبر من مجموع القطرين وبالتالي لا يوجد تصادم...

    ملاحظة: ليس بالضروري أن تستخدم الجذر التربيعي لحساب الطول (لأن هذا سيأخذ وقت معالجة طويل)
    ملاحظة: لا تنسى أن تأخذ بعين الإعتبار الMatrix المطبقة على المجسمات

    هذا كل شيء
    لقد وضعت في محركي مثال على إكتشاف التصادم Sphere و Box تستطيع الرجوع وتتبع سير العملية (DX9-VB.Net)

    الموضوع طويل واختصرت منه الكثير، حاول أن تنجح في صنع التصادم ولو لم تتمكن من العملية جرب أن تشتغل على Dx8 و Dx9 (أفضل بكثير) وإستخدم محركات جاهزة في البداية حتى تتعلم كيف تصنع محركك الخاص...

    ByeBye
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  11. #11
    التسجيل
    27-11-2002
    الدولة
    Demon * World
    المشاركات
    300

    رد: موضوع لمناقشة التصادم في Directx

    الدايركت إكس يبيله واحد عنده إجازة سنتين و يمه قهوة


    و شفتو اشلون الفيجوال بيسك ما يدعم الدايركت اكس 9 ؟؟

    الـ ++C يدعم اخير اصدار و المثال اللي شرحه الاخو راااااد "عملاق"
    www.nightvisiongames.com
    المشروع الحالي (غير معلن عنه) : N-1
    نوع اللعبة : RTS (إستراتيجية)
    لغة اللعبة : English + عربي (احتمال كبير)
    فريق العمل :
    حسين هاني (أنا) : مبرمج
    المهندس وائل : مبرمج
    فراس الإسكندراني : تصميم و إدارة
    Snake_x86 : المصمم القائد لرسوم الـ 3D

    إذا تبي تدخل معانا ، ادخل منتدانا الإنظمام من هذي الوصلة :
    http://nightvisiongames.com/communit...hp?showforum=4

    و شوف الموضوع المثبت

  12. #12
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

    رد: موضوع لمناقشة التصادم في Directx

    اقتباس المشاركة الأصلية كتبت بواسطة GOGENDANTESS مشاهدة المشاركة
    و شفتو اشلون الفيجوال بيسك ما يدعم الدايركت اكس 9 ؟؟
    بس أخوي لو قرأت ردي:

    اقتباس المشاركة الأصلية كتبت بواسطة PRG of RPG مشاهدة المشاركة
    إذا إنت حاب الVisual Basic إشتغل على Visual Basic.Net - DirectX9
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  13. #13
    التسجيل
    27-11-2002
    الدولة
    Demon * World
    المشاركات
    300

    رد: موضوع لمناقشة التصادم في Directx

    اقتباس المشاركة الأصلية كتبت بواسطة PRG of RPG مشاهدة المشاركة
    بس أخوي لو قرأت ردي:



    هما تتظل الـ ++C بالصدار بسبب السرعة و اهي اختيار كل شركات الألعاب
    www.nightvisiongames.com
    المشروع الحالي (غير معلن عنه) : N-1
    نوع اللعبة : RTS (إستراتيجية)
    لغة اللعبة : English + عربي (احتمال كبير)
    فريق العمل :
    حسين هاني (أنا) : مبرمج
    المهندس وائل : مبرمج
    فراس الإسكندراني : تصميم و إدارة
    Snake_x86 : المصمم القائد لرسوم الـ 3D

    إذا تبي تدخل معانا ، ادخل منتدانا الإنظمام من هذي الوصلة :
    http://nightvisiongames.com/communit...hp?showforum=4

    و شوف الموضوع المثبت

  14. #14
    التسجيل
    01-11-2006
    المشاركات
    18

    رد: موضوع لمناقشة التصادم في Directx

    السلام عليكم...

    مسألة التصادم ليس لها علاقة بمحرك رسومي دونا عن الآخر

    فمثلا لا يختلف مبدأ التصادم في DirectX عن OpenGL و...

    ولكن المهم فهم كيفية التعامل مع التصادم..

    في الألعاب يستخدم أكثر من مدخل في عالم الحسابات والفيزياء:

    1) 3D Math:
    أ. بسيطة: وهي أبسط طريقة وتعتبر أولية جدا
    . المسافة بين نقطتين في الفضاء:
    Assume we have 2 vectors (i.e each vector is the center-point for each object in the 3d space)
    // --
    v1 = obj1.gePosition();
    v2 = obj2.getPosition();
    distance = sqrt ((v1.x-v2.x)+(v1.y-v2.y)+(v1.z-v2.z))
    // --
    فإذا كانت النتيجة صفر فهما على نفس المكان...
    الآن أنت بحاجة لمعرفة قطر كل منهما وإبدال الصفر بمجموع أنصاف أقطارهما..
    // --
    r1 = float(obj1.transform.boundingSphere[2])/2;
    r2 = float(obj2.transform.boundingSphere[2])/2;
    if (distance <= r1+r2)
    // stop Moving
    else
    // Cont. Moving
    // --
    ب. تركيبية:
    1.وهو يكون باستخدام Ray
    2. استخدام خوارزميات تحسين الآداء Octree
    2) Physics
    باستخدام إحد حزم الفيزياء وتعريف الأجسام المتحرك منها والثابت وحساب Interpenetration بين الجسيمات.

    عسى أن أكون أفدتك في شيء

    وأعتذر عن عدم تنظيم المادة بسبب عدم سهولة التعامل مع محرر المنتدى...
    H4 ZeQart

  15. #15
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

    رد: موضوع لمناقشة التصادم في Directx

    اقتباس المشاركة الأصلية كتبت بواسطة H4 ZeQart مشاهدة المشاركة

    وأعتذر عن عدم تنظيم المادة بسبب عدم سهولة التعامل مع محرر المنتدى...
    أوافق 100% الموضوع أطول من أن يشرح بشكل كامل،،، من هنا تأخذ المقدمة والمفاهيم أو المشاكل التقنية ، ولكن لا امتلك الوقت حالياً لكتابة الأمثلة الكاملة ، اتمنى لو يتفضل احد الإخوان/أخوات بوضع مثال Visual Basic للتوضيح ....
    كود:
    Arabian Xtreme Designs : http://axdteam.com

صفحة 1 من 2 12 الأخيرةالأخيرة

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •