تعال نبدأ مع Irrlicht على NET
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
بداية هذه أول محاولة لي في طرح عرض لبداية استعمال المحرك المشهور Irrlicht وان شاء الله سأضع بعض التطبيقات للنسخة الغير رسمية IrrlichtCP (CP=Cross Platform) وسرد بعض الفروق المهم هنا أننا نريد فتح طريق سهل لاستعمال المحرك وآمل أن أوفق في ذلك ان شاء الله
بعض الملاحظات:
1-الموضوع لا أعتبره مادة علمية تفيد كثيرا المتخصصيين بقدر ماهو إلا تطبيق عملي موجه للمبتدئيين الراغبيين في إستخدام المحرك على بيئة الدوت نت
2-معظم الأمثلة التي سأطرحها إن شاء الله في هذا الجانب ستكون إما بVB2005 أو C#2005 Express (فقط لاني في العمل مثبت الأول وفي البيت مثبت الثاني )
قبل البدأ:
قبل أن نبدأ معا ولأنه جانب تطبيقي بحت يجب أن تتوفر لدينا الأدوات اللازمة :
أولا : المحرك طبعا والموجود على الموقع الرسمي أين يمكن لكم تحميل الSDK وأنصح باستخدام آخر إصدار
الموقع الرسمي للمحرك
تحميل الSDK مباشرة من هنا
http://irrlicht.sourceforge.net/imag...l/irrlicht.png
ثانيا: بيئة العمل طبعا بالدوت نت , يمكن تحميل C#2005 Express أو VB2005 Express من موقع Microsoft مباشرة
http://msdn2.microsoft.com/en-us/exp...dc_dnld_cs.gif
http://msdn2.microsoft.com/en-us/exp...dc_dnld_vb.gif
بعد تحضير الأدوات نبدأ على بركة الله
نفتح مشروع جديد على بيئة التطوير ونختار مشروع من النوع Console Application
http://www.arabteam2000-forum.com/up...1187861985.jpg
طبعا نحتاج للبدأ إضافة مرجع المكتبة الخاصة بالدوت نت والموجودة في الملف Irrlicht.NET.dll
http://www.arabteam2000-forum.com/up...1187861994.jpg
http://www.arabteam2000-forum.com/up...1187862003.jpg
ملاحظة :
1- لمستعملي الvs2005 فما فوق استعمال يجب استعمال تغليف المكتبة يعني نحتاج الى ملفات اضافية
IrrlichtW.dll و libIrrlichtW.so هذه الملفات موجودة مع المكتبة IrrlichtCP
طبعا هناك فرق بين الملف Irrlicht.NET.dll الموجود في المحرك الرسمي والموجود مع الSDK الخاصة ب IrrlichtCP
لذلك لن نقوم باستبدال الملف الأصلي فقط ننسخ الملفين الذين نحتاجهما
أو يمكنكم تحميلها من المرفق
http://www.arabteam2000-forum.com/st..._types/zip.gif Dlls.zip ( 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
منقول من موقع الفريق العربي للبرمجة
---------------------------------------------------------------------------------
أنتظر ردودكم و ترشيحاتكم.
----------------------------
رد: تعال نبدأ مع Irrlicht على NET
عفوأ ياأخوتي خربطط عدد الموضوع 3 أرجو عدم حذفة أخذفوا 2 وخلوا 1 والله بلغلط.
رد: تعال نبدأ مع Irrlicht على NET
شكراً أخي ولكن ممكن تصع الدرس في كتاب
لأن الكود ونرتيب يلخبط الواحد وشكراً
وكم مساحة SDK ؟؟
رد: تعال نبدأ مع Irrlicht على NET
موضوعك ذكرني بأــ XNA
http://creators.xna.com/
http://creators.xna.com/Education/GettingStarted.aspx
شكرا على الموضوع القيم وارجو ان نرى بعض العينات من خبراتكم ولو بسيطة
اقتباس:
عفوأ ياأخوتي خربطط عدد الموضوع 3 أرجو عدم حذفة أخذفوا 2 وخلوا 1 والله بلغلط.
تم
رد: تعال نبدأ مع Irrlicht على NET
بسم الله
يا اخ عصفور انت ليك خبرة في المحرك ده ولا مجرد عرض للمحرك ؟؟
لان بصراحة لو انفتحنا في المحرك ده ممكن نغير مسار الالعاب عندنا 180 درجة .. ونوصل للعالمية
رد: تعال نبدأ مع Irrlicht على NET
أخي amir imam أخي أنا عدي خبرة في هذا البرنامج
كاكاروت أخي الكود مفهوم و إذا بدك أنسخو متل ماهو للبرنامج وسوف يمشي الحال إنشاء الله
رد: تعال نبدأ مع Irrlicht على NET
سؤال: هل أستطيع أن أستخدم كل ميزات هذا المحرك على لغة #C , لنفرض أنه تم تطوير ShaderX هل أستطيع أستخدامه من داخل #C
-------------------------
جواب:بالطبع يمكن استخدام كل ميزات المحرك على الc# أما بالنسبة للتعديل على المحرك فهو مفتوح المصدر مكتوب بالc++ فيمكنك التعديل عليه
وقد قام البعض ببناء تغليف للمحرك لتسهيل استعماله على مختلف المنصات والمشروع باسم IrrlichtCP وهو مفتوح المصدر أيضا ومكتوب بالC#
يمكنك الرجوع اليه على الموقع الخاص:http://irrlichtnetcp.sourceforge.net....php/Main_Page---------------------------------------------------------------------------------------------------------------------
رد: تعال نبدأ مع Irrlicht على NET
التطبيق الثاني : إضافة شكل + كاميرا
---------------------------------------
الآن سنقوم ببعض الإضافات بعدما رأينا كيفية تحضير المحرك للعمل سنرى اليوم كيف نضيف شكل ثلاثي الأبعاد داخل اطار الرسم وكذلك كاميرا رؤية
يلزمنا فضاء الأسماء 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/up...1187880071.jpg
ملاحظة :
----------
طبعا علينا اضافة الصورة 1.jpg في نفس المجلد الموجود فيه الملف التنفيذي للمشروع يعني في bin\debug
http://www.arabteam2000-forum.com/up...1187880051.jpg
رد: تعال نبدأ مع Irrlicht على NET
السلام عليكم ورحمة الله وبركاته
بعدما رأينا في التطبيق السابق كيفية تحضير المحرك للعمل وبعض الإضافات الصغيرة جدا
سنرى كيف نطبق بشكل مبسط المثال الموجود في ال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/up...1187963260.jpg
حتى لا يلومني أصدقاء الفيبي عن عدم وضعي الأكواد بالvb هذه المرة يمكنهم تحميل التطبيق بالvb و C# معا
مع أني لا أرى فرقا كبيرا بين اللغتين http://www.arabteam2000-forum.com/st...eeth_smile.gif
http://www.arabteam2000-forum.com/st..._types/zip.gif tut3.zip ( 35.83k ) ملاحظة : أعتذر عن استعمال بعض المصطلحات مباشرة لاني تعودت عليها الآن وصدقوني لا أعرف اذا كنت سأعرف الترجمة الفعليه لكل شئ المهم إن شاء الله يكون شئ بسيط وإذا كان هناك أشياء غامضة ممكن نشرحها مع بعض
رد: تعال نبدأ مع Irrlicht على NET
السلام عليكم ورحمة الله وبركاته
اليوم سنرى إن شاء الله تطبيق جميل نقوم فيه بحركتين جديدتين هما تدوير جسم + إضافة مصدر ضوء ثابت وقد إخترت كجسم كوكب الأرض وصورة التطبيق بعد الإنتهاء إن شاء الله تكون كما في الصورة المرفقة
http://www.arabteam2000-forum.com/up...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);
الآن يمكن القول أننا أنهينا الأشياء الضرورية لعمل المشهد
رد: تعال نبدأ مع Irrlicht على NET
جزاك الله خيراً
الدروس جميلة أنا بحكي لما تنتهي الدروس تجمعهم كلهم في كتب أفضل ^^
ونستنا دروس إضافة الشخصية إلخ
رد: تعال نبدأ مع Irrlicht على NET
وأريد لو سمحت رابطة أخرى SDK لأن الرابطة الأولى لم أفتح الموقع بعلق حاولت عدة مرات ولكن دون جدوى ؟؟
رد: تعال نبدأ مع Irrlicht على NET
جميل ورائع جدا جدا جدا لكن هل يعتبر بقوي السي بلس بلس في برمجة الالعاب لكن اريد اريحك هذه البرامج كلها بهدف التسهيل لاني السي صعبة استغله صعوبة السي بعمل برامج للتسهيل مثل الدارك بيسيك وبرنامج الموجود في الموضوع ولا تلاحظ الالعاب كلها يكتبل في ملفات الاف اكس وملفات الدل انه كلها على السي بلس بلس ليبريل يعني كلهم على مكتبات السي ولكن هذه البرامج ممكن توصلك للسي بسرعة لانها تسهلك عمل السي بشكل رائع وشكرا جزيلا لك وممكن اوخد ايميلك للتواصل اعجبني المحرك جدا وشكرا
رد: تعال نبدأ مع Irrlicht على NET
وصحيح ممكن برنامج sdk الي يدعم الدايركت اكس 9 عاوزه ضروري مشان الله للسي بسرعة بسرعة بانتظارك وايضا علشان اكمل معك موضوعك الي طارحه لاني فرمتت الجهاز ومش موجود عندي
رد: تعال نبدأ مع Irrlicht على NET
والله ياأخوتي برنامج sdk أنا نسختو من سيدي بس مابعرف وين الرابطة تبعو على كل حال دورو بتلاقوه ويلي بيعرف رابطه أرجو أن يعطيهم ياه