الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعال نبدأ مع Irrlicht على Net

رائج
بدأه DreamNet في 23 أغسطس 2007 · 109 رد · 19,552 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السلام عليكم ورحمة الله وبركاته

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

بعض الملاحظات:

1-الموضوع لا أعتبره مادة علمية تفيد كثيرا المتخصصيين بقدر ماهو إلا تطبيق عملي موجه للمبتدئيين الراغبيين في إستخدام المحرك على بيئة الدوت نت

2-معظم الأمثلة التي سأطرحها إن شاء الله في هذا الجانب ستكون إما بVB2005 أو C#2005 Express (فقط لاني في العمل مثبت الأول وفي البيت مثبت الثاني )

قبل البدأ:

قبل أن نبدأ معا ولأنه جانب تطبيقي بحت يجب أن تتوفر لدينا الأدوات اللازمة :

أولا : المحرك طبعا والموجود على الموقع الرسمي أين يمكن لكم تحميل الSDK وأنصح باستخدام آخر إصدار

الموقع الرسمي للمحرك

تحميل الSDK مباشرة من هنا

irrlicht.png

ثانيا: بيئة العمل طبعا بالدوت نت , يمكن تحميل C#2005 Express أو VB2005 Express من موقع Microsoft مباشرة

bb308899.expressdc_dnld_cs.gif

bb308899.expressdc_dnld_vb.gif

بعد تحضير الأدوات نبدأ على بركة الله

نفتح مشروع جديد على بيئة التطوير ونختار مشروع من النوع Console Application

post-23361-1187861985_thumb.jpg

طبعا نحتاج للبدأ إضافة مرجع المكتبة الخاصة بالدوت نت والموجودة في الملف Irrlicht.NET.dll

post-23361-1187861994_thumb.jpg

post-23361-1187862003_thumb.jpg

ملاحظة :

1- لمستعملي الvs2005 فما فوق استعمال يجب استعمال تغليف المكتبة يعني نحتاج الى ملفات اضافية

IrrlichtW.dll و libIrrlichtW.so هذه الملفات موجودة مع المكتبة IrrlichtCP

طبعا هناك فرق بين الملف Irrlicht.NET.dll الموجود في المحرك الرسمي والموجود مع الSDK الخاصة ب IrrlichtCP

لذلك لن نقوم باستبدال الملف الأصلي فقط ننسخ الملفين الذين نحتاجهما

أو يمكنكم تحميلها من المرفق

Dlls.zip

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

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

'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

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

تم تعديل هذه المشاركة بواسطة DreamNet في 24 أغسطس 2007 في 19:52

1
#2

مشكور على الدرس و ننتظر جديدك

لدي سؤال : هل أستطيع أن أستخدم كل ميزات هذا المحرك على لغة #C , لنفرض أنه تم تطوير ShaderX هل أستطيع أستخدامه من داخل #C

و السلام

#3

السلام عليكم ورحمة الله وبركاته

بالطبع أخي الكريم يمكنك استخدام كل ميزات المحرك على الc# أما بالنسبة للتعديل على المحرك فهو مفتوح المصدر مكتوب بالc++ فيمكنك التعديل عليه

وقد قام البعض ببناء تغليف للمحرك لتسهيل استعماله على مختلف المنصات والمشروع باسم IrrlichtCP وهو مفتوح المصدر أيضا ومكتوب بالC#

يمكنك الرجوع اليه على الموقع الخاص IrrlichtCP

بالتوفيق ان شاء الله

#4

التطبيق الثاني : إضافة شكل + كاميرا

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

يلزمنا فضاء الأسماء 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

في الأخير سنتحصل على الشكل التالي:

post-23361-1187880071_thumb.jpg

ملاحظة :

طبعا علينا اضافة الصورة 1.jpg في نفس المجلد الموجود فيه الملف التنفيذي للمشروع يعني في bin\debug

post-23361-1187880051_thumb.jpg

يمكنكم اضافة صورة الكساء التي استعملتها والمرفقة هنا

texture.zip

بالتوفيق للجميع دائما

#5

ممتاز ,, نادرا مانرى لغات الدوت نت تأخذ حقها ..

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

الدرس واضح , والشرح ممتاز ,, المحرك سهل .. كل ما نحتاجه اضافة أمثلة + التعليق عليها كما تفضلت .

تم تعديل هذه المشاركة بواسطة الشمري في 24 أغسطس 2007 في 06:14

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

السلام عليكم ورحمة الله وبركاته

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

سنرى كيف نطبق بشكل مبسط المثال الموجود في ال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);

الآن انتهينا لنرى كيف سيكون المشهد

post-23361-1187963260_thumb.jpg

حتى لا يلومني أصدقاء الفيبي عن عدم وضعي الأكواد بالvb هذه المرة يمكنهم تحميل التطبيق بالvb و C# معا

مع أني لا أرى فرقا كبيرا بين اللغتين :D

tut3.zip

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

بالتوفيق للجميع إن شاء الله

#7

السلام عليكم ورحمة الله وبركاته

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

post-23361-1188023819_thumb.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);

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

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

لكي أرى محاولاتكم هنا ونناقش معا التغلب على المشاكل

بالتوفيق دائما

#8

السلام عليكم ورحمة الله وبركاته

أظنني قد بدأت الإسراع قليلا , لا بأس . :rolleyes:

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

وفي انتظار تطبيقاتكم نحاول معا :

تحميل الملف room.3ds (المحرك يدعم ملفات ال3dmax أيضا ) داخل مشهد مع كسائه طبعا بصورة ما ولتكن wall.bmp واللفات موجودة طبعا داخل مجلد media الموجود مع الsdk

لا تنسو الإضاءة

بالتوفيق للجميع

#9

السلام عليكم

موضوع ممتاز اخي

نحن فى حاجه لمثل هذه المواضيع

اكمل وفقق الله

163374357.gif

#10
اقتباس
أظنني قد بدأت الإسراع قليلا , لا بأس .

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

تمرين ممتاز ,,, ولكن هل يجب أن يكون بالدوت نت :( .

سأحاول أن أقوم به بالسي شارب .. وان لم استطع فساستخدم السي دوت نت .

ما رأيك ؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#11

السلام عليكم ورحمة الله وبركاته

أكيد أخي الشمري يجب أن يكون بالدوت نت ولو بال Delphi.NET حتى نبقى داخل إطار الموضوع ;)

المثال بسيط وقد تم الحديث عن الطرق المستعملة وإن شاء الله يكون الجاي أصعب :rolleyes:

وان شاء الله أن يكون هناك مشارك آخر عدى أخونا الشمري

#12

السلام عليكم :lol:

أخي

لم ينجح معي أي درس :unsure:

مع أنني قمت بالتأكد

من الأكواد لذا أرجو شرح كل سطر برمجي كل على حده :wacko:

علما أنني أستخدم فيجول بيسك 2005

أرجو الرد السريع

وشكرا

#13

هل هناك خطأ في أي مكان

يعني على الأقل أرفق لنا أو أكتب الخطأ أين

الدروس بسيطة جدا وهي تمهيدية وتأسيسية لاستعمال هذا المحرك فقط وليست مادة علمية

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

بالتوفيق للجميع في انتظار حلول التطبيق

#14
DreamNet كتب:
هل هناك خطأ في أي مكان

يعني على الأقل أرفق لنا أو أكتب الخطأ أين

الدروس بسيطة جدا وهي تمهيدية وتأسيسية لاستعمال هذا المحرك فقط وليست مادة علمية

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

بالتوفيق للجميع في انتظار حلول التطبيق

مرحبا

لقد وجدت الخطاء الكود لا يعمل إلا بوجود كاميرا :lol:

أنا أسف أتعبتك معي :unsure:

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

(Window Form)أخي هل أستطيع أن أجعل اللعبة تعمل على :(

لكي يسهل التحكم بها

وأرجو أن تكمل دروسك

وشكرا

#16

أهلا بك أخي مجددا

سعيد لأنك تستطيع المتابعة معنا الآن

بالنسبة لسؤالك الأول عن WINDOWFORM فإذا كان قصدك تطبيق من النوع Window form فيمكن عمل ذلك بنفس الخطوات

لكن لا تظن أن الفورم راح تستطيع التحكم فيه بهذه البساطة لان المحرك هو المسؤول عن إنشاء الشاشة التي يتم الرسم عليها

أما بالنسبة للسؤال الثاني فلا تتعجل بطبيعة الحال إمكانية المحرك كبيرة جدا لكن نريد التدرج فقط وسنرى في المستقبل كيف نستطيع عمل COLLISION داخل المشهد المنشئ

لكن لم تقل لي هل حليت التطبيق الذي وضعته ؟

أظن أن المتابعين للموضوع قليلون أو أنهم لا يريدون المشاركة

المهم سأتابع إن شاء الله في المرات القادمة دون الانتظار

بالتوفيق دائما للجميع وإن شاء الله يبلغنا العزيز الحكيم شهر رمضان الكريم

#17

السلام عليكم :lol:

DreamNetأخي

لقد بدأت أفهم فلسفة المحرك

ولكن لدي مشكلة مع الأحداث

أريد أن أعرف متى يتم ضغط زر معين من لوحة المفاتيح

أرجو الرد السريع

#18

السلام عليكم ورحمة الله وبركاته

الأخ crazy Programm2007er بالنسبة للأحداث سيتم الحديث عنها بالتفصيل في الدروس القادمة , فأنا لا أريد الإسراع أكثر وسعيد جدا لأنك فهمت فلسفة المحرك لكن أصبر علي قليلا :rolleyes:

أردت أن أطرح فائدة قبل الشروع في تطبيق اليوم

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

لذلك نبدأ بنفس الخطوات وننشئ مثال بسيط فيه الأكواد الأساسية التي ننطلق بها ثم من القائمة file نختار export Template

post-23361-1188455823_thumb.jpg

ثم نختار إنشاء قالب مشروع ونضغط التالي

بعدها نختار الأيقونة للقالب ونكتب تعليق

post-23361-1188456008_thumb.jpg

والآن القالب جاهز للاستعمال

post-23361-1188456054_thumb.jpg

الآن نمر للتطبيق اليوم والذي ستكون نتيجته إن شاء الله كالصورة التالية

post-23361-1188456170_thumb.jpg

نلاحظ في الصورة أننا أنشأنا سطح أو لأرضية وعملنا له كساء ووضعنا مكعب فوقها

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

باستعمال AddHillPlaneMesh نضيف للمشهد أرضية مسطحة بتحديد عدة عناصر

1- اسم السطح أو التل إذا صح التعبير (غير مهم الآن)

2-حجمه يعني هنا مساحته لانه سياخذ متغير من النوع dimension2df

3-عدده وهنا المساحة التي حددنا بها السطح سنقوم بتكرارها

4-مجموعة الكساء أو الmaterial الذي سيغطي الأرضية

طبعا لتحديد الكساء هنا ننشئ كائن Material ندرج فيه الtexture للأرضية (هنا فقط سأدرج كساء واحد وليس متعدد ) وقد استعملت ككساء الملف الموجود مع المحرك وهو rockwall.bmp

Material mat = new Material();
mat.Texture1 = driver.GetTexture("C:/irrlicht-1.3.1/media/rockwall.bmp");

IAnimatedMesh hillmesh = smgr.AddHillPlaneMesh("myHill",
new Dimension2Df(30, 30),
new Dimension2D(40, 40), mat, 5,
new Dimension2Df(0, 0),
new Dimension2Df(10, 10));
ISceneNode floor = smgr.AddMeshSceneNode(hillmesh.GetMesh(0), null, -1);
floor.SetMaterialFlag(MaterialFlag.LIGHTING, false);

ملاحظة تعطيل الإضاءة في حالة عدم وجود مصدر للإضاءة ضروري لكي يظهر لنا المشهد لانه مفعل إفتراضيا لذلك نغير MaterialFlag.LIGHTING إلى false كماهو في السطر الأخير

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

ومن جهة علينا تحديد مكان الكاميرا برفعها على محور y على الأقل لأنه بدون تحديد مكانها فسوف تظهر لأول مرة مع نفس مستوى الأرضية المنشئة

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

صورة الكساء مرفقة في الملف التالي :

texture.zip

بالتوفيق للجميع دائما

#19

ماشاء الله عليك .. معلومة جدا ممتازة ,, لم اعرف بهذه الفكرة .. كنت انشئ الارضية يدويا .. جننتني الاحداثيات

معلش تأخر الواجب ..:D

هذه محاولتي بالسي شارب :D صدق او لا تصدق .

post-42837-1188462409_thumb.jpg

تحميل مرحلة من الثري دي ماكس 3ds لكن بدون اكتشاف التصادم وبدون استخدام اي طرق من طرق التسريع ,

ايضا اضفت الكاميرا تتحرك بتأثير الFly Circle Animator .

المثال على قد الحال .. أتمنى نتعرف طريقة اكتشاف التصادم قريبا .

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

وطبعا تحتاج لملفات الDLLs الموجودة في اول هالموضوع

3DS___Fly_Camera.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#20

أهلا بك أخي الشمري

تطبيق جميل (لم أجربه بعد ) لكني رأيت الكود ووجدتك لم تستعمل أي عنصر إضاءة

والشئ الجميل أنك استعملت تطبيق حركة على الكاميرا

أظنك ستحب السي شارب خصوصا مع الOgre :rolleyes:

#21

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

أنا لي باع طويل في برمجة الألعاب باستخدام OpenGL و C++ واستفدت جداً من دروس NeHe

إلا أني أقول ومن غير مجاملة أن دروس الأخ DreamNet هي الأفضل حتى الآن !! فشرحها سهل جداً بالإضافة إلى أن هذا المحرك الجبَّار به كل الإمكانيات التي تؤهلك لعمل لعبة من الألف وحتى الياء, علينا فقط بتعلم أساسيات المحرِّك ثم دع المجال لخيالك ليسرح به ويمرح في عمل الألعاب

والمدهش في المحرك أنه يستطيع جلب تصاميم Mesh بأقوى البرامج مثل 3DMax و Maya , أي أنك إن قمت بعمل شخصية بسيطة ببرنامج Poser ثم صدرتها لـ3DMax فهذا يعني أنه يمكنك تحريكها بكل بساطة وسهولة بمحرك Irrlicht المُذهل...

أخي DreamNet....جزاك الله خيراً على ما تقوم به..إلا أن عتبي عليك أني أميل إلى البيسك أكثر من الشارب إلا أن الإختلافات لا تعدو أن تكون Syntax Differences فقط :-)

أثابك الباري و.بالتوفيق وإلى الأمام دوماً ....

في انتظار جديد دروسك المتميزة : )

أخوك,

#22

السلام عليكم ورحمة الله وبركاته

أهلا أخي بن الشريف , سعيد بانضمامك معنا وآمل أن يستفيد كل الأعضاء من الدروس

أما بخصوص عتبك فأنا في الحقيقة أستعمل كثيرا الفيبي وسبب استعمالي للC# هي محاولة لاستقطاب عدد أكبر من الأعضاء للمشاركة هنا

و إن شاء الله سأحاول تعديل المشاركات باضافة أكواد الفيبي :rolleyes:

بالنسبة لمشرفنا العزيز الشمري فقط رجعت لمثالك ورأيت أن المجسم الذي تستعمله صغيرا جدا لماذا لا تقوم بتكبيره بتغيير الخاصية scale للnode

والمكعب الذي أدرجته غير ظاهر عليك بتعديل الاحداثيات على y ووضعها بالموجب على الأقل :D لكي تظهر

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

بالتوفيق دائما للجميع

#23

على أحر من الجمر :-)

ومع كل درس لك دعوة في ظهر الغيب :rolleyes:

#24
اقتباس
والمكعب الذي أدرجته غير ظاهر عليك بتعديل الاحداثيات على y ووضعها بالموجب على الأقل لكي تظهر

أنا لم اكن اريد رسم مكعب ... كما قلت .. الموضوع هو تعديل على مثال من عمل صاحب المحرك .. وقمت بمسح كل شيء الا المكعب نسيته :D

خاصة وأن شاشة جهازي ليست بعيدة عن شاشة الاخ سلوان :D الالوان فيها غير مظبوطة وبالكاد اشاهد النصوص :D .

سأشتري شاشة جديدة قريبا ان شاء الله .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

مواضيع مشابهة