شباب لو ممكن أحد يجيب هذا السؤال اللي طالما بحثت عن إجابه له
هل من الممكن تحريك الكاميرا حسب توجيه الشخصيه في العاب الثري دي؟
ولو ممكن ياليت أحد يشرحلي أو يوضحلي الصوره علما بانني أستعمل الفيجوال بيسك
وشكرا:-) :0) :D
عرض للطباعة
شباب لو ممكن أحد يجيب هذا السؤال اللي طالما بحثت عن إجابه له
هل من الممكن تحريك الكاميرا حسب توجيه الشخصيه في العاب الثري دي؟
ولو ممكن ياليت أحد يشرحلي أو يوضحلي الصوره علما بانني أستعمل الفيجوال بيسك
وشكرا:-) :0) :D
كيف يعني ما فهمت وضح
:":
سؤالك مش واضح .... لم تحدد نوع الكامير ... هل هي من الخلف مثل تومب ريدير او من الجنب مثل كره القدم ؟ ...
على العموم انا لا اعرف الاجابة :cool:
first..
which directx version u use...??
i use dx9 and vb.net....if u use the same then this may help u...
just assign the world position of the desired object (character) to the device.transform.view property...thats all...ofcourse u need to play with it alittle...
here r some sample's...
...............3rd person view:
dim mainCharMesh as Mesh = yourCharacterMesh
dim newCameraPos as Vector3
dim newCameraLAt as Vector3
newCameraPos.X = CSng(mainCharMesh.Device.Transform.World.M41)
newCameraPos.Y = CSng(mainCharMesh.Device.Transform.World.M42)
newCameraPos.Z = CSng(mainCharMesh.Device.Transform.World.M43 - 3.0F)
newCameraLAt.X = newCameraPos.X
newCameraLAt.Y = newCameraPos.Y
newCameraLAt.Z = newCameraPos.Z + 3
...............or 1st person view:
newCameraPos.X = CSng(mainCharMesh.Device.Transform.World.M41)
newCameraPos.Y = CSng(mainCharMesh.Device.Transform.World.M42)
newCameraPos.Z = CSng(mainCharMesh.Device.Transform.World.M43)
newCameraLAt.X = newCameraPos.X
newCameraLAt.Y = newCameraPos.Y
newCameraLAt.Z = newCameraPos.Z - 1
................then use the values to set the camera into its new position
Device.Transform.View = Matrix.LookAtLH(newCameraPos, newCameraLAt, cameraUpVec3)
...............put this in a sub and call the sub on each frame so the camera updates on time...
hope this helps...
السلام عليكم
هو اصلا لازم تتحرك الكاميرا مع الشخصية و الا الشخصية بتختفي من الشاشة.:)
اول شيء عليك تكتب كود تحريك الشخصية ثم تساوي احداثيات الكاميرا مع حركة الشخصية .
في الثري دي تعرف ان المحور X هو عرض الشاشة و Y هو عمق الشاشة و Z هو ارتفاع الشاشة .
فلكل شيء موجود على الشاشة احداثيات .. الشخصيات و الكاميرا و .. و ..
و هي x و y و z .
فبعد برمجة حركة الشخصية يمكن استخدام المعادلات الرياضية او المصفوفات للتحكم في حركة الكاميرا و تتم حركة الكاميرا على محورين(غالباً) هما x و y .
هذا مثال للتبسيط و ليس كود :
افرض ان لديك شخصية بإسم man و كاميرا لمتابعة الشخصية بإسم camera ...
فأن :
camera.x = man.x - 320
camera.y = man.y - 200
هذا طبعا ليس كود و لكنه للتوضيح فقط و لو فرضنا انه كود فسيجعل الشحصية في منتصف الشاشة تقريبا .. حيث ستكون الشخصية في منتصف عرض الشاشة و هنا عرض الشاشة هو X و ستكون على بعد 200 نقطة بالنسبة لعمق الشاشة .(( Y )).
-----------------------------------------------------------------
hey man...
u made it too complex...
it is easier than that...no need for matrix...actually useing matric in these simple areas will eat the game fram rate...
انا اشوف ان كلام مبرمج الالعاب هو الاصح
wtf...
i am using that source i pasted above in my game engine...it works 100%...
believe me u dont need matrix...as i said once...matrix takes some process time and this is not good...
another reason for not using matrix is that this is a simple thing and it can be done with simple addition math...
انا راح اعطي فكرة عامة موضوع اللاعب والكاميرا:
اول شي لكل كاميرا موقعين:
***الموقع الاول: هو موقع الكامير. اسمو (posion of camera)
***الموقع الثاني: هو اتجاه الكامير (اي الكاميرا نتضر الى من)(lookAt)
يعني تقدر تقول زي السهم. (1)>----------------> (2)
وطبعا كل موقع لو احداثياته (ْX,Y,Z)
واللاعب عنده موقع واحد وهو موقع الاعب في الفضاء الثلاثي الابعاد
يعني اتجاه نظر الكامير = موقع اللاعب
الاحداثيات هي:
X هو على يمين الشاشة
-X على يسار الشاشة
Y للاعلى
-Y للاسفل
Z لخارج الشاشة
-Z لداخل الشاشة
هذي الفكرة العامة اما بانسبة للتحريك الكامير مع اللاعب هناك شي اخر وهو الدوران ، والدوران = الزاوية من الموضوع الاصلي ويكون حول محورY
وهذا كود التحريك
ستلاحظ ان هناك متغير dis هذا النتغير هو يحمل المسافة بين الكامير و نظر الكاميرا(اي الكامير واللاعب)كود:dim sngPositionX As Single
dim sngPositionZ As Single
dim sngLookAtX As Single
dim sngLookAtZ As Single
dim sngAngleY as Single
dim Dis as Single
dis =60
sngLookAtX = sngLookAtX + (Cos(sngAngleY)
sngLookAtZ = sngLookAtZ + (Sin(sngAngleY)
sngPositionX = sngLookAtX + (Cos(sngAngleY) * Dis)
sngPositionZ = sngLookAtZ + (Sin(sngAngleY) * Dis)
camera.x =sngPositionX
camera.y = sngPositionY
camera.z =sngPositionZ
camera.lookAtX = sngLookAtX
camera.lookAtY = sngLookAtY
camera.lookAtZ = sngLookAtZ
player.lookAtX = sngLookAtX
player.lookAtY = sngLookAtY
player.lookAtZ = sngLookAtZ
player.RotationY= sngAngleY
ارجو ان اكون واضح في الشرح
واي استفسار آخر انا حاضر
شوف اللعبة رن الموجودة في التوقيع راح تفيدك في الكاميرا وتحريك الاعب واشيا اخرى
شكرا على التفاعل من "أع ضاء المنتدى وأولا :
الأخ zifft
i,m vity indebted for you to your answer
thank you for your reaction
الأخ مبرمج الألعاب
والله مدري كيف أشكرك
تراك أفدتني كثيييير والله
الأخ son of use
مشكور أخوي وما قصرت معانا
تسلملي يا : i386 وما قصرت
أما انت يا الأخ كريستال فما أقدر أقلك أكثر من جزاك الله ألف ألف خير
ومشكووووووووور على الردود
my old nick was zifft...and the new one is i386...
ur welcome..
there is not diffrence
zifft or i389
in general
thank you agin
السلام عليكم ،،
اولا: بخصوص المصفوفات و انها تأكل معدل تغير سرعة العرض فهو كلام خاطىء !
نقلاً من كتاب برمجة الالعاب المرشد الكامل - الجزء الثالث
لعمل نموذج لكاميرا :
اولاً : هناك نوعان من الكاميرات المستخدمة فى الالعاب -
نموذج كاميرا اويلر (Euler) و
و معنى هذا النموذج ان الكاميرا له زوايا و اتجاه و موضع .
و هناك نوع اخر اسمه UVN الذى لديه امكانية النظر الى هدف معين Look At Target
و U,V,N هم متجهات .
و عند استخدام الكامير يجب ان تكون لديك هذه المعلومات 1- مجال الرؤية Field Of View(FOV)
2- بعد الرؤية Viewing Distance - مستويات القطع او القص البعيدة و القريبة Far and Near Clipping Planes
- و مستوى الرؤية View Plane و منفذ رؤيتك او مكان رؤيتك View Port - كل هذه المطاليب
تلعب دور هام فى تكوين الكاميرا .
و بإختصار اجعل احادثيات لاعبك هى احادثيات الكاميرا طبعاً هناك خفايا و طرق عديدة مثل التدوير
كانك تحلق فى طائرة و و التتبع و و .
الى الاستاذ الذى يقول ان الماتريكس ليس لها فائدة او لا يستحسن استخدامها
كيف تقول هذا و انت مستخدم المصفوفات هنا فى
الى الاستاذ الذى يقول ان الماتريكس ليس لها فائدة او لا يستحسن استخدامها
كيف تقول هذا و انت مستخدم المصفوفات هنا فى نقل المجسم ( MainCharMesh) من احداثياته و هو فى العالم World Coordinates او بيئته الى احداثيات الكاميرا اى قمت بعمل نقل للاحداثيات او تحويل Transform لكى تجعل هذا الكائن امام الكاميرا
...............3rd person view:
dim mainCharMesh as Mesh = yourCharacterMesh
dim newCameraPos as Vector3
dim newCameraLAt as Vector3
من هنا
----------
newCameraPos.X = CSng(mainCharMesh.Device.Transform.World.M41)
newCameraPos.Y = CSng(mainCharMesh.Device.Transform.World.M42)
newCameraPos.Z = CSng(mainCharMesh.Device.Transform.World.M43 - 3.0F)
---------- الى هنا استخدمت المصفوفات
newCameraLAt.X = newCameraPos.X
newCameraLAt.Y = newCameraPos.Y
newCameraLAt.Z = newCameraPos.Z + 3
...............or 1st person view:
و هنا ايضا استخدمت المصفوفات
newCameraPos.X = CSng(mainCharMesh.Device.Transform.World.M41)
newCameraPos.Y = CSng(mainCharMesh.Device.Transform.World.M42)
newCameraPos.Z = CSng(mainCharMesh.Device.Transform.World.M43)
newCameraLAt.X = newCameraPos.X
newCameraLAt.Y = newCameraPos.Y
newCameraLAt.Z = newCameraPos.Z - 1
................then use the values to set the camera into its new position
و هنا استخدمت المصفوفات MatrixLook At Left Hand و استخدمت نظام اليد اليسرى .
Device.Transform.View = Matrix.LookAtLH(newCameraPos, newCameraLAt, cameraUpVec3