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

مساعده في Irrlichtnetcp

بدأه NO BODY CAN BEAT ME في 11 يونيو 2008 · 4 رد · 795 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

انا جديد في irrlichtnetcp بدات في بعض الاشياء البسيطه

عندي كم سؤال

1. بالنسبه للتصادم

تعلمت كيف اعمل تصادم بين الكاميرا والتضاريس

والكاميرا و كائن node موجود في اللعبه

لكن السؤال كيف ممكن اعمل تصادم بين كائن node وnode اخر وبين الnode والتضاريس؟

2. اذا كنت اريد عمل اكثر من node ليشكلوا المخلوقات في اللعبه هل علي ان اضع node لكل مخلوق ام يمكنني عمل ذلك بطريقه مثل loop او شيء من هذا القبيل

تم تعديل هذه المشاركة بواسطة NO BODY CAN BEAT ME في 11 يونيو 2008 في 16:29

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#2

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

المفروض عندما نريد عمل تصادم بين الكاميرا والأرضية فاننا نقوم بتحديد الnode الخاص بالارضية باستعمال كائن من النوع TraingleSelector

ثم نعم animation مربوطة بالكاميرا باستخدام الدالة CreateCollisionResponseAnimator

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

الكائن من النوع MetaTraingleSelector هو الذي سيستعمل مع الدالة CreateCollisionResponseAnimator

بالتوفيق

#3

مشكور على الرد اخي الحمد لله تم حل المشكله

المشكله كانت اني انا عامل ربط للnode مع الكميرا عشان اقدر احركه فكان التصادم مع الnode لا يعمل اما التصادم مع الكاميرا يعمل

الان قمت بتحريك الكميرا عن طريق node وتم حل المشكله الحمد لله باقي بعض التعديلات عشان اثبت الكاميرا مع node بشكل افضل

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

		device.FileSystem.WorkingDirectory = "F:\irrlicht-1.4.1\media"
		AddHandler device.OnEvent, AddressOf OnEvent

 cam = sm.AddCameraSceneNodeFPS(Nothing, 90.0F, 500.0F, True)
		cam.Position = New Vector3D(150, 650, 1500)
		cam.Target = New Vector3D(0, 15, 0)
		cam.Rotation = New Vector3D(50, 0, 0)

		exnode = sm.AddSphereSceneNode(50.0F, 470, sm.RootSceneNode)

		exnode.Position = New Vector3D(300, 650, 1500)

	  terrain = sm.AddTerrainSceneNode("terrain-heightmap.bmp", Nothing, 0, New Vector3D(-50, 0, 0), New Vector3D(0, 0, 0), New Vector3D(40, 4.4F, 40), New Color(255, 255, 255, 255), 5, TerrainPatchSize.TPS129)
		terrain.SetMaterialFlag(MaterialFlag.Lighting, False)
		terrain.SetMaterialType(MaterialType.DetailMap)
		terrain.SetMaterialTexture(0, driver.GetTexture("terrain-texture.jpg"))
		terrain.SetMaterialTexture(1, driver.GetTexture("detailmap3.jpg"))
		terrain.ScaleTexture(1.0F, 20.0F)
		Dim s As TriangleSelector = sm.CreateTerrainTriangleSelector(terrain, 0)

		Dim anim3 As Animator = sm.CreateCollisionResponseAnimator(s, exnode, New Vector3D(50, 50, 50), New Vector3D(0, -5, 0), New Vector3D(0, 0, 0), 0.05F)


		exnode.AddAnimator(anim3)

		While device.Run
			driver.BeginScene(True, True, New Color(0, 500, 500, 500))
			sm.DrawAll()


			driver.EndScene()
		End While

		device.Dispose()
		Me.Close()

   Private Function OnEvent(ByVal ev As [Event]) As Boolean

		If ev.Type = EventType.KeyInputEvent Then

			Select Case ev.KeyCode
				Case KeyCode.Escape
					device.Close()
				Case KeyCode.Key_W
					movee(exnode, New Vector3D(0, 0, 20))
				Case KeyCode.Key_S
					movee(exnode, New Vector3D(0, 0, -20))
				Case KeyCode.Key_D
					movee(exnode, New Vector3D(20, 0, 0))
				Case KeyCode.Key_A
					movee(exnode, New Vector3D(-20, 0, 0))
				Case KeyCode.Key_W And KeyCode.Key_D
					movee(exnode, New Vector3D(20, 0, 20))
			End Select

		End If



	End Function

	Private Sub movee(ByVal nodee As SceneNode, ByVal vec As Vector3D)
		Dim matrix As Matrix4 = New Matrix4
		matrix.RotationDegrees = cam.Rotation
		matrix.TransformVect(vec)
		nodee.Position = nodee.Position + vec
		nodee.UpdateAbsolutePosition()
		nodee.Rotation = cam.Rotation
		setcam(cam, nodee, New Vector3D(0, -50, 100))


	End Sub
	Private Sub setcam(ByVal cam As CameraSceneNode, ByVal nodee As SceneNode, ByVal vec As Vector3D)
		Dim matrix As Matrix4 = New Matrix4
		matrix.RotationDegrees = cam.Rotation
		matrix.TransformVect(vec)
		cam.Position = nodee.Position - vec
		cam.UpdateAbsolutePosition()



		' cam.UpVector = upv
		'cam.Target = nodee.Position
	End Sub

اذا بتحب جرب الكود بس غير مسار العمل الى مسار الirrlicht عندك

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#4

آسف على التأخير :)

عندما نريد تحريك الكاميرا مع النود فالأفضل أن ننشئ كاميرا ثابتة

شئ آخر بما أنك ستربط الكاميرا بالNode فاجعله هو الأب للكاميرا

cam.Parent = Node

بعدها فقط تحكم بال Target للكاميرا

أظن بالطريقة هذه سيكون الكود أسهل

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

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

وقد تحدثت عن مقدمة للفيزياء باستعمال المكتبة IrrlichtFramework التي تستعمل IrrlichtCP مع Newton و OpenAl

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

عند مثال لاستعمال المكتبة الفيزيائية ODE مع IrrlichtCP أيضا لكني لا أعرف أين هو الآن :)

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

#5

انا استعملت الfps cam لها تستطيع الدوران مع حركة الماوس واذا جعلت الnode هو الاب للكاميرا سوف يصبح الtarget مثبت على الnode ولن تستطيع الكاميرا الدوران

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

تحياتي اخي الكريم

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

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