جلسة تعارف مع مكتبة Tokamak الفيزيائية الموضوع مغل

الناقل : elmasry | الكاتب الأصلى : الشمري | المصدر : www.arabteam2000-forum.com

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

الموضوع باختصار هو محاولة فهم عمل المكتبة الفيزيائية Tokamak .
أضفت هذا الموضوع بناءً على هذا السؤال .

http://www.arabteam2...howtopic=106791
الموضوع لن يكون دروس تلقينية كما هي العادة .. سأطرح أمثلة .. وأضيف عليها تعليقات .. وأضيف عليها تساؤلات ..
يعني ستحتاج أن تبذل جهد لكي تستخلض المعلومة ..

أيضا .. أي شخص يستطيع الاستفادة من هذا الموضوع .. سواءً محبي OpenGL او Directx او vb او python ... وأي لغة تحتوي على جرافكس .

----

مقدمة : لماذا Tokamak ؟

هذا أول سؤال يمكن طرحه .. لماذا اخترت هذه المكتبة الفيزيائية من أصل عشرات المكتبات .

الجواب ستعرفه بعد أن تقرأ هذه القصة المملة :

قمت بتحميل عدة مكتبات .. منها :

Novodex : من أروع المكتبات الموجودة .. كنت أنوي بالفعل تعلمها ,, ميزتها كثرة الامثلة وقوة الhelp في الموقع .
لكن بعد ان قامت الشركة ageia بشراء هذه المكتبة .. أصدرت اصدار جديد لا يقل روعة .
لكن المشكلة ان الاصدار الجديد .. كل الامثلة عليه هو من اصدار سابق ,, فحصل عندي fatal error في رأسي .
ومشاكل لاتعد ولاتحصى من صعوبة التثبيت الى تشابك الامثلة .

المهم عرفت في النهاية أن حجم هذه المكتبة أكبر من حجمي .. وتركتها .

ODE - OPAL : هما مكتباتان متشابهتان .. احدها مبنية على الاخرى( OPAL مبنية على ODE ) .
كنت أطمح بالفعل لاتقان هاتين المكتبتين .. قلبت الدنيا فوق تحت لاجد مثال واحد فقط ... لم اجد ؟؟
فتركتهما .

Tokamak : مكتبة ليست بحجم المكتبات الاخرى .. لكنها تعتبر سهلة وعملية بنفس الوقت .
استطعت أن أفهم أول مثال يتكلم عنها ... وبمجرد أن تعلمت أول مثال ...
اكتشفت أني فهمت عمل :
مكتبة ODE + OPAL + Tokamak .


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


أولا لمبرمجي لغة السي ,,,

حمل الSDK للTokamak من خلال هذا الموقع ..
ولايحتاج أن تحمل الامثلة فهي معقدة للغاية .
http://www.tokamakphysics.com/


ثانيا مصادر التعلم :
http://www.adamdawes.com/programming/tokam..._Framework.html
هذه أفضل الدروس على الاطلاق .. وتعلمت مفهوم عمل المكتبة من خلاله .
الدروس على dx ولكنه مفيد للجميع .


وهذا ...
فيه أمثلة للمكتبة للopengl و dx ..

هنا opengl سوف تجد مثالين حملهم .
http://www.codesampl...c/oglsrc_13.htm


وهنا للdx ستجد الامثلة في القائمة ايضا .

http://www.codesampler.com/dx9src/

هنا أمثلة على opengl امثلة جيدة .
http://www.codecolony.de/Tokamak/

http://aaocos.free.f...tokamak_src.rar


أما لمبرمجي الvb : :
فأذكر أني وجدت أمثلة خاصة للفيبي .. أعدت البحث الان في قووقل ولكن لم اجدها .. سأبحث في جهازي لعلي لم أحذفها .



---------------------------
تثبيت المكتبة لمبرمجي السي :

التثبيت سهل .. يوجد ملفات header انسخها لمجلد الinclude او اربطها من خلال المترجم .. وكذلك كلفات الlib .
وملفات الdll انسخها الى system32 .

-----------------------------------

الان لنبدأ بالتعرف على المكتبة ...



المكتبة تستعمل أنواع من المتغيرات خاصة بها .. أهم الانواع هي كالتالي

typedef unsigned int            u32;
typedef float                      f32;
typedef double                    f64;


[/FONT]ايضا يوجد تركيب اسمه neV3
هذا تركيب المتجه ..
نحن في الغالب سنستعمله ليخزن لنا ثلاث قيم
مثلا
x - y - z .
او يمكن استخدامه لتخزين ابعاد مكعب مثلا
width -- height - depth

مثلا تكتب شيء شبيه بالتالي :
neV3 Pos; 

Pos.Set( x , y , z );

الان ستجد القيم مخزنة في تركيب داخل ذلك التركيب

struct neV3
{
public:

        union
        {
                f32 v[4];
               
                struct nTag
                {
                        f32 X,Y,Z,W;
                }n;
        };
.
.
}


بمعنى أن هذا الneV3 تستعمله حسب الرغبة وحسب ما يقتضيه الموقف .



ثانيا : كيفية عمل المكتبة Tokamak .



يوجد كلاس اسمه neSimulator .

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

بالتالي ستجد انك عندما تنشئ كائنات أخرى فانك بطريقة مباشرة او غير مباشرة تربطها بالكائن neSimulator .

الكلاس neRigidBody .
هذا الكلاس هو خاص بالمجسمات المتفاعلة في فضاء اللعبة ..

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

الان أين هو neRigidBody ؟؟ هل هو الكرة أو أرضية الملعب . . .

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


الكلاس neAnimatedBody .

نرجع لمثالنا قبل قليل .
عندك مجسم عبارة عن كرة ... وتريد أن تسقط هذه الكرة على أرضية الملعب ..

نحن قلنا أن neRigidBody الان هو الكرة ..
بينما neAnimatedBody هنا هو أرضية الملعب .

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



أخيرا ,,,

نحن علمنا فائدة neRigidBody و neAnimatedBody لكن .. هذين الكائنين فقط يقومان بتحديد .. حجم المجسم .. موقعه .. ونحو ذلك .
لكنهما لايعلمان شيء عن شكل المجسم نفسه ..
هل هو اسطواني .
هل هو مكعب .
هل هو كرة ..
الخ .

اذا يوجد كائن اخر يحدد شكل المجسم الذي نريد عمله .. سواء أكان هذا المجسم neAnimatedBody او neRigidBody ..
الكلاس اسمه :
neGeometry



الخلاصة ..

neSimulator هو كلاس يقوم بادارة المحرك ككل .. ويقوم بتحديث احداثيات المجسمات ويوجد نوعين من المجسمات يمكن اضافتهما الى neSimulator وهما neRigidBody و neAnimatedBody ولتحديد شكل المجسمات نستخدم الكائن neGeometry وهو يسمح لنا بانشاء ثلاث مجسمات: box - cylinder - sphere .. وبامكاننا انشاء مجسمات أعقد .

بعد كل هذه الدورة الكاملة... تخرج لنا مكتبة tokamak احداثيات الاجسام التي قامت بمعالجتها ..

الاحداثيات عادةً تكون مخزنة في مصفوفة matrix .. وهي نفسها المصفوفة التي تتعامل معها opengl أو directx . .

أيضا يجب أن تعرف أنت كيف ترسم كرة .. مكعب .. متوازي مستطيلات .. وغيرها من الاشكال .. وتوفر opengl و dx طرق جاهزة لعمل ذلك .. أو أن تقوم انت بنفسك برسم هذه المجسمات ,



إلى هنا ينتهي الكلام النظري .. التطبيق القادم سيكون عملي إن شاء الله .