المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تعال نبدأ مع Irrlicht على NET



TheIslamFalcon
31-12-2007, 02:47 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

بداية هذه أول محاولة لي في طرح عرض لبداية استعمال المحرك المشهور Irrlicht وان شاء الله سأضع بعض التطبيقات للنسخة الغير رسمية IrrlichtCP (CP=Cross Platform) وسرد بعض الفروق المهم هنا أننا نريد فتح طريق سهل لاستعمال المحرك وآمل أن أوفق في ذلك ان شاء الله

بعض الملاحظات:
1-الموضوع لا أعتبره مادة علمية تفيد كثيرا المتخصصيين بقدر ماهو إلا تطبيق عملي موجه للمبتدئيين الراغبيين في إستخدام المحرك على بيئة الدوت نت
2-معظم الأمثلة التي سأطرحها إن شاء الله في هذا الجانب ستكون إما بVB2005 أو C#2005 Express (فقط لاني في العمل مثبت الأول وفي البيت مثبت الثاني )

قبل البدأ:
قبل أن نبدأ معا ولأنه جانب تطبيقي بحت يجب أن تتوفر لدينا الأدوات اللازمة :
أولا : المحرك طبعا والموجود على الموقع الرسمي أين يمكن لكم تحميل الSDK وأنصح باستخدام آخر إصدار
الموقع الرسمي للمحرك (http://irrlicht.sourceforge.net/)
تحميل الSDK مباشرة من هنا
http://irrlicht.sourceforge.net/images/general/irrlicht.png (http://prdownloads.sourceforge.net/irrlicht/irrlicht-1.3.1.zip?download)


ثانيا: بيئة العمل طبعا بالدوت نت , يمكن تحميل C#2005 Express أو VB2005 Express من موقع Microsoft مباشرة
http://msdn2.microsoft.com/en-us/express/bb308899.expressdc_dnld_cs.gif (http://download.microsoft.com/download/C/6/F/C6F4733B-67C7-4C15-9F21-61F7A3167505/VCS.iso)
http://msdn2.microsoft.com/en-us/express/bb308899.expressdc_dnld_vb.gif (http://download.microsoft.com/download/7/5/b/75b12965-b2de-4a42-b5e1-bda6b2cf7c01/vb.iso)
بعد تحضير الأدوات نبدأ على بركة الله

نفتح مشروع جديد على بيئة التطوير ونختار مشروع من النوع Console Application
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187861985.jpg

طبعا نحتاج للبدأ إضافة مرجع المكتبة الخاصة بالدوت نت والموجودة في الملف Irrlicht.NET.dll
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187861994.jpg
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187862003.jpg

ملاحظة :
1- لمستعملي الvs2005 فما فوق استعمال يجب استعمال تغليف المكتبة يعني نحتاج الى ملفات اضافية
IrrlichtW.dll و libIrrlichtW.so هذه الملفات موجودة مع المكتبة IrrlichtCP
طبعا هناك فرق بين الملف Irrlicht.NET.dll الموجود في المحرك الرسمي والموجود مع الSDK الخاصة ب IrrlichtCP
لذلك لن نقوم باستبدال الملف الأصلي فقط ننسخ الملفين الذين نحتاجهما
أو يمكنكم تحميلها من المرفق
http://www.arabteam2000-forum.com/style_images/ip.boardpr/folder_mime_types/zip.gif (http://www.arabteam2000-forum.com/index.php?act=attach&type=post&id=50736) Dlls.zip (http://www.arabteam2000-forum.com/index.php?act=attach&type=post&id=50736) ( 2.37mb ) عدد مرات التحميل: 274


كما قلنا نضيف المرجع الخاص بالمكتبة

بعدها سنحتاج إلى استدعاء فضاءات الأسماء اللازمة للبدء باستعمال دوال المحرك

كود:
----
'VB code
Imports Irrlicht
Imports Irrlicht.Video
Imports Irrlicht.Core

//C# code
using Irrlicht;
using Irrlicht.Video;
using Irrlicht.Core;


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


كود:
-----
'VB code
Dim device As IrrlichtDevice

//C# code
IrrlichtDevice device;



هذا الكائن سيقوم بالتعامل مع نافذة الرسم لذلك يجب تحضيرها بتحديد البرامترات اللازمة
وهي
DriverType نوع المكتبة المستعملة للرسم
Windowsize حجم شاشة الرسم من النوع Dimension2D
Bits رقم يحدد نسبة للبكسل على الألوان
Fullscreen من النوع boolean يحدد ان ما كان العرض سيكون ملئ الشاشة أو لا
والبرامترات الباقية سنتطرق لها في حين استعمالها

وبذلك يمكننا الآن تهيئة شاشة الرسم أو مخرج الرسم


كود:
-----
'VB code
device = New IrrlichtDevice(DriverType.DIRECT3D9)

//C# code
device = new IrrlichtDevice(DriverType.DIRECT3D8);


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

كود:
-----
'VB code
Dim driver As IVideoDriver = device.VideoDriver
//C# code
IVideoDriver driver = device.VideoDriver;



الآن نعمل loop الأساسية التي لن تتوقف إلا إذا تم غلق النافذة المنشئة



كود:
-----
'VB code

While device.Run
driver.BeginScene(True, False, New Color(255, 100, 100, 100))
driver.EndScene()
End While

//C# code
while (device.Run())
{
driver.BeginScene(true, true, new Color(255, 100, 100, 100));
driver.EndScene();
}


beginScene لها 3 برامترات تحدد طريقة عرض الأشياء مع المحرك irrlicht
منها backBuffer و zbuffer الذي لا نحتاج تفعيله في الرسوم الثلاثية الأبعاد عادة
ولون الخلفية المحدد بمزيج الألوان الأساسية

طبعا يمكن تحديد عنوان شاشة الرسم باستخدام الخاصية WindowCaption لل device المستعمل
device.WindowCaption = "First Test"
ننفذ الكود
مبروك هذا أول تجربة لنا لاستعمال المحرك

هل هناك مشاكل؟
نتأكد دئما من وجود الملفات اللازمة مع الملف التنفيذي المنشئ
لاتنسوا في مجلد ال Debug الموجود تحت المجلد Bin يجب أن نجد الملفات التالية

Irrlicht.dll
Irrlicht.NET.dll
IrrlichtW.dll
libIrrlichtW.so
منقول من موقع الفريق العربي للبرمجة
---------------------------------------------------------------------------------
أنتظر ردودكم و ترشيحاتكم.
----------------------------

TheIslamFalcon
31-12-2007, 02:59 PM
عفوأ ياأخوتي خربطط عدد الموضوع 3 أرجو عدم حذفة أخذفوا 2 وخلوا 1 والله بلغلط.

kakarot
31-12-2007, 05:16 PM
شكراً أخي ولكن ممكن تصع الدرس في كتاب
لأن الكود ونرتيب يلخبط الواحد وشكراً
وكم مساحة SDK ؟؟

PrinceOfSorrow
31-12-2007, 05:22 PM
موضوعك ذكرني بأــ XNA

http://creators.xna.com/

http://creators.xna.com/Education/GettingStarted.aspx


شكرا على الموضوع القيم وارجو ان نرى بعض العينات من خبراتكم ولو بسيطة


عفوأ ياأخوتي خربطط عدد الموضوع 3 أرجو عدم حذفة أخذفوا 2 وخلوا 1 والله بلغلط.

تم

Amir Imam
31-12-2007, 06:03 PM
بسم الله
يا اخ عصفور انت ليك خبرة في المحرك ده ولا مجرد عرض للمحرك ؟؟
لان بصراحة لو انفتحنا في المحرك ده ممكن نغير مسار الالعاب عندنا 180 درجة .. ونوصل للعالمية

TheIslamFalcon
31-12-2007, 07:03 PM
أخي amir imam أخي أنا عدي خبرة في هذا البرنامج
كاكاروت أخي الكود مفهوم و إذا بدك أنسخو متل ماهو للبرنامج وسوف يمشي الحال إنشاء الله

TheIslamFalcon
31-12-2007, 07:48 PM
سؤال: هل أستطيع أن أستخدم كل ميزات هذا المحرك على لغة #C , لنفرض أنه تم تطوير ShaderX هل أستطيع أستخدامه من داخل #C
-------------------------
جواب:بالطبع يمكن استخدام كل ميزات المحرك على الc# أما بالنسبة للتعديل على المحرك فهو مفتوح المصدر مكتوب بالc++ فيمكنك التعديل عليه
وقد قام البعض ببناء تغليف للمحرك لتسهيل استعماله على مختلف المنصات والمشروع باسم IrrlichtCP وهو مفتوح المصدر أيضا ومكتوب بالC#
يمكنك الرجوع اليه على الموقع الخاص:http://irrlichtnetcp.sourceforge.net/index.php/Main_Page---------------------------------------------------------------------------------------------------------------------

TheIslamFalcon
31-12-2007, 07:57 PM
التطبيق الثاني : إضافة شكل + كاميرا
---------------------------------------
الآن سنقوم ببعض الإضافات بعدما رأينا كيفية تحضير المحرك للعمل سنرى اليوم كيف نضيف شكل ثلاثي الأبعاد داخل اطار الرسم وكذلك كاميرا رؤية

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

كود:
----
Imports Irrlicht.Scene

بعدها نعرف الكائن المسؤول عن تسيير الأشكال ورسمها داخل إطار الرسم والذي سيكون مرتبط بال SceneManager للdevice المنشئ

كود:
----
Dim smgr As ISceneManager = device.SceneManager

الآن يمكننا إضافة الأشكال إلى إطار الرسم بانشاء كائن من النوع ISceneNode
مثلا نضيف مكعب داخل مساحة الرسم لذلك علينا تحديد حجمه و موقعه بتحديد الاحداثيات

كود:
----
Dim box As ISceneNode = smgr.AddCubeSceneNode(10, Nothing, _
-1, New Vector3D(10, 5, 40))


الحجم هنا حددناه ب10 ولم نربط المكعب الذي أنشأناه بأي شكل أو scene أخرى لذلك كتبنا Nothing ثم حددنا موقع المكعب باستعمال شعاع ثلاثي الأبعاد يمثل الاحداثيات التي سنضيف فيها شكلنا
الآن قمنا برسم فقط مكعب ولكي يظهر لنا المكعب بشكل جميل نختار كساء له باختيار صورة تطبع على مختلف جوانب المكعب

كود:
----
Dim mat As ITexture = drive.GetTexture("1.jpg")
box.SetMaterialTexture(0, mat)

طبعا لن يظهر شئ إلا إذا عطلنا تفعيل الإضاءة على المجسم لعدم وجود عنصر إضاءة داخل الscene المنشئة

كود:
----
box.SetMaterialFlag(MaterialFlag.LIGHTING, False)


الآن نأتي إلى انشاء كاميرا تتحرك لذلك نضيف ببساطة السطر

كود:
----
smgr.AddCameraSceneNodeFPS()


لو نفذنا الكود الآن سنرى أن مؤشر الفأرة ظاهر والأفضل أن نقوم بإخفاءه أليس كذلك؟

كود:
----
device.CursorControl.Visible = False

في الأخير سنتحصل على الشكل التالي:
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187880071.jpg

ملاحظة :
----------
طبعا علينا اضافة الصورة 1.jpg في نفس المجلد الموجود فيه الملف التنفيذي للمشروع يعني في bin\debug
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187880051.jpg

TheIslamFalcon
31-12-2007, 10:44 PM
السلام عليكم ورحمة الله وبركاته

بعدما رأينا في التطبيق السابق كيفية تحضير المحرك للعمل وبعض الإضافات الصغيرة جدا
سنرى كيف نطبق بشكل مبسط المثال الموجود في الSDK والذي يخص مشهد اللعبة الشهيرة quake3
لذلك نحتاج أولا أن نحدد وجود الملف map-20kdm2.pk3 الموجود في المجلد media الملف مضغوط ويحتوي على تجسيد المشهد من كسائات وملفات لازمة لرسم المشهد
بعد أن نحدد موقع الملف وليكن مثلا : C:\irrlicht-1.3.1\media\ نبدأ الآن في العمل


لقد رأينا كيف نحضر المحرك إذا نجرب لوحدنا الآن تحضير المحرك لكي نرى هل إستفدنا من شئ فيما سبق

الآن قبل رسم المشهد يعني قبل بدء الحلقة while نحمل العناصر اللازمة للمشهد والموجودة كما قلنا في الملف المضغوط map-20kdm2.pk3 باستعمال الدالة AddZipFileArchive


كود:
---
device.FileSystem.AddZipFileArchive("D:/irrlicht-1.3.1/media/map-20kdm2.pk3");

لحد الآن لم نقم بتحميل المشهد لذلك علينا أولا تحميل ال mesh ثم إضافته داخل كائن مشهد scene لكي يتم عرضه
يعني نستدعي الدالة GetMesh لتحميل الmesh في كائن annimatemesh رغم أن مشهد quake3 ليس متحرك


كود:
---

IAnimatedMesh mesh = smgr.GetMesh("20kdm2.bsp");


لتحميل المشهد نحتاج إلى كائن من النوع ISceneNode الذي سنمرر له الmesh الذي حملناه ونستطيع عمل ذلك بطريقتين مختلفتين إما AddOctTreeSceneNode أو AddAnimatedMeshSceneNode
حسب الحاجة فالأولى تحمل المشهد جزئيا فقط يعني سيتم رسم فقط الأجزاء المرئية من الmesh والثانية تقوم بتحميل الكل وهنا نرى أن لنا الخيار فقط نحتاج فقط إلى تحميل الأجزاء المرئية داخل المشهد لتحسين الآداء في بعض المشاهد
لكن في البعض قد يجب تحميل الmesh كاملا خاصة إذا كان متحرك


كود:
---

SceneNode node =null;
node = smgr.AddOctTreeSceneNode(mesh.GetMesh(0), null, 0);

الآن انتهينا من تحميل المشهد لذلك نمر إلى وضع الكاميرا داخل المشهد
فقط يجدر بنا الذكر هنا أن هناك 3 أنواع من الكاميرات يوفرها المحرك
كاميرا ثابتة , كاميرا متحركة و كاميرا من النوع الموجود في برنامج maya الشهير والتي تتحرك باستعمال الماوس فقط بالدوران عند الضغط على الزر الأيسر والتنقل باليمين

يمكننا باستعمال الكائن ICameraSceneNode بناء كاميرا نحدد مكانها

كود
ICameraSceneNode cam = smgr.AddCameraSceneNodeFPS();
cam.Position = new Vector3D(200, 850, 0);
cam.Rotation = new Vector3D(30, 50, 0);

الآن انتهينا لنرى كيف سيكون المشهد
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1187963260.jpg

حتى لا يلومني أصدقاء الفيبي عن عدم وضعي الأكواد بالvb هذه المرة يمكنهم تحميل التطبيق بالvb و C# معا
مع أني لا أرى فرقا كبيرا بين اللغتين http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif
http://www.arabteam2000-forum.com/style_images/ip.boardpr/folder_mime_types/zip.gif (http://www.arabteam2000-forum.com/index.php?act=attach&type=post&id=50797) tut3.zip (http://www.arabteam2000-forum.com/index.php?act=attach&type=post&id=50797) ( 35.83k ) ملاحظة : أعتذر عن استعمال بعض المصطلحات مباشرة لاني تعودت عليها الآن وصدقوني لا أعرف اذا كنت سأعرف الترجمة الفعليه لكل شئ المهم إن شاء الله يكون شئ بسيط وإذا كان هناك أشياء غامضة ممكن نشرحها مع بعض

TheIslamFalcon
31-12-2007, 10:47 PM
السلام عليكم ورحمة الله وبركاته

اليوم سنرى إن شاء الله تطبيق جميل نقوم فيه بحركتين جديدتين هما تدوير جسم + إضافة مصدر ضوء ثابت وقد إخترت كجسم كوكب الأرض وصورة التطبيق بعد الإنتهاء إن شاء الله تكون كما في الصورة المرفقة
http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-23361-1188023819.jpg

أول شئ يجب ذكره أن مجسم الأرض موجود مع ملفات المحرك يعني في المجلد media دائما وهو ملف directx اسمه earth.x إذا الخطوة الأولى هي تحميل هذا الملف داخل المشهد
بنفس الطريقة التي رأيناها في المثال السابق نعمل على تعريف mesh مربوط بالملف الذي ذكرناه


كود:
-----
IAnimatedMesh earthMesh = smgr.GetMesh("C:/irrlicht-1.3.1/media/earth.x");
ISceneNode node = smgr.AddAnimatedMeshSceneNode(earthMesh, null, 0);



الmesh صغير نسبيا لذلك نقوم بتكبيره نوعا ما ثم نحدد موقعه


كود:
-----

node.Scale = new Vector3D(10, 10, 10);
node.Position = new Vector3D(2, 2, 40);

الآن نأتي إلى الشئ المهم هنا ألا وهو تحديد الحركة للعنصر الذي أضفناه داخل المشهد

المحرك يوفر عدة حركات على المجسمات من حركة الدوران باستعمال الدالة CreateRotationAnimator طبعا لعمل ذلك يجب إسناد الحركة إلى كائن من النوع ISceneNodeAnimator ثم نقوم بإضافته إلى الnode الرئيسي الذي أنشأناه لتطبيق الحركة


كود:
-----

ISceneNodeAnimator anim = smgr.CreateRotationAnimator(
new Vector3D(0, 0.2f, 0));
node.AddAnimator(anim);

الدالة CreateRotationAnimator لها برامتر يقوم بتحديد سرعة دوران الجسم في الثانية بالنسبة للمحاور الثلاثة وهنا ترى أننا حددنا الدوران فقط على محور y بسرعة 0.3 دورة في الثانية

الآن نتكلم عن مصدر الإضاءة والتي سيتم انشاءها باستخدام كائن من النوع ILightSceneNode

كود:
-----

ILightSceneNode light = smgr.AddLightSceneNode(null, new Vector3D(0,0,0),
new Colorf(0.5f, 1.0f, 0.5f, 0.0f), 200.0f,0);


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


كود:
-----

ISceneNode bill = smgr.AddBillboardSceneNode(light, new Dimension2Df(60, 60)
, new Vector3D(-20, 20, 40), 0);
bill.SetMaterialTexture(0, driver.GetTexture("C:/irrlicht-1.3.1/media/particlewhite.bmp"));
bill.SetMaterialFlag(MaterialFlag.LIGHTING, false );
bill.SetMaterialType(MaterialType.TRANSPARENT_ADD_COLOR);



الآن يمكن القول أننا أنهينا الأشياء الضرورية لعمل المشهد

kakarot
01-01-2008, 08:30 AM
جزاك الله خيراً
الدروس جميلة أنا بحكي لما تنتهي الدروس تجمعهم كلهم في كتب أفضل ^^
ونستنا دروس إضافة الشخصية إلخ

kakarot
01-01-2008, 08:32 AM
وأريد لو سمحت رابطة أخرى SDK لأن الرابطة الأولى لم أفتح الموقع بعلق حاولت عدة مرات ولكن دون جدوى ؟؟

theprinces
03-01-2008, 06:22 AM
جميل ورائع جدا جدا جدا لكن هل يعتبر بقوي السي بلس بلس في برمجة الالعاب لكن اريد اريحك هذه البرامج كلها بهدف التسهيل لاني السي صعبة استغله صعوبة السي بعمل برامج للتسهيل مثل الدارك بيسيك وبرنامج الموجود في الموضوع ولا تلاحظ الالعاب كلها يكتبل في ملفات الاف اكس وملفات الدل انه كلها على السي بلس بلس ليبريل يعني كلهم على مكتبات السي ولكن هذه البرامج ممكن توصلك للسي بسرعة لانها تسهلك عمل السي بشكل رائع وشكرا جزيلا لك وممكن اوخد ايميلك للتواصل اعجبني المحرك جدا وشكرا

theprinces
03-01-2008, 06:24 AM
وصحيح ممكن برنامج sdk الي يدعم الدايركت اكس 9 عاوزه ضروري مشان الله للسي بسرعة بسرعة بانتظارك وايضا علشان اكمل معك موضوعك الي طارحه لاني فرمتت الجهاز ومش موجود عندي

TheIslamFalcon
05-01-2008, 10:42 PM
والله ياأخوتي برنامج sdk أنا نسختو من سيدي بس مابعرف وين الرابطة تبعو على كل حال دورو بتلاقوه ويلي بيعرف رابطه أرجو أن يعطيهم ياه