Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> اصول اولیه در طراحی بازیهای کامپیوتری -> الگوریتم های تشخیص برخورد دو بعدی
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

الگوریتم های تشخیص برخورد دو بعد
نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


جمعه 21 مهر 1385 - 20:00
پاسخ بصورت نقل قول
سلام خدمت همگی دوستان:
به نظر بنده بحث در بارهء یه همچین موضوعاتی خیلی می تونه به پیشرفت بازیساز ها کمک کنه. و همینطور که دیروز پریروزا گفتم این بخش از اون بخشهاییه که باید بیشتر از اینی که هست رونق بگیره.
به هر حال فکر میکنم جوابی که برای سوالات از این دست داده میشه تنها به درد سوال کننده نمیخوره.
خوب بریم سر سوال بنده.
شما چند جور تکنیک و الگوریتم برای تشخیص بر خورد تو بازیهای دو بعدی بلدید؟ لطفا مشروح توضیح بدید.

اون جوری که بنده بلدم اینه.

اول یه عکس دو رنگ با همون نقشی که ماسک تو gm داره برای هر آبجکت در نظر می گیریم بعد برای آبجکتهای متحرکمون هم علاوه بر اون ماسکه یه چند تا نقطه که با فواصل معینی از هم و توی ماسک قرار دارند در نظر می گیریم.
حالا برای هر استپ باید تموم آبجکتها رو چک کنیم و ببینیم که اگر امکان برخورد دو آبجکت وجود داره برای ماسک اون آبجکته تمام نقاط آبجکت اولی رو چک کنیم که آیا تو ماسک اون یکی می افتند یا نه.
این راهیه که من بلدم اگه شما بهترش رو بلدین یا راهی برای بهینه سازی این راه به ذهنتون می رسه از بنده دریغش نکنید.
قربان همگی eta

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Kochol
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 1 مرداد 1384
تعداد ارسالها: 298


شنبه 22 مهر 1385 - 10:59
پاسخ بصورت نقل قول
سلام
اين راه به نظرم خيلي كند باشه بهتر نيست از همان باندينگ باكس استفاده كنيم.

_________________
Kochol Game Engine

[img]http://barnamenevis.org/forum/image.php?type=sigpic&userid=6875&dateline=1258101798[/img]
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


شنبه 22 مهر 1385 - 21:45
پاسخ بصورت نقل قول
علیکم
البته منظورت رو فهمیدم ولی برای اینکه اشتباهی نگرفته باشم میگم.
احتمالا منظورت از bounding rect اینه که برای هر آبجکت یه مستطیل در نظر گرفته بشه و چک بشه که با آبجکت کناری تداخل پیدا می کنه یا نه.
در ایصورت به نظرت دقتش کم نمیشه. البته من هنوز امتحان نکردم نه این اولی رو نه باندینگ باکس رو.
به این شکل همه چیز علی الخصوص اشیاء بزرگ باید به شکل غیر عادی با کف مستطیل شکل به زمین وصل بشن. دیگه نه از ساختمون گرد خبریه نه لوزی نه ... فقط مستطیل.
البته یه راهی داره اونم اینه که از بیش از یه مستطیل استفاده بشه. که در اون صورت هم یا به علت زباد بودن مستطیلها کار از اون راه اول هم سنگین تر میشه. یا برای حفظ کارایی باید مستطیل ها رو کم کرد که زیاد جالب در نمیاد. البته این رو هم بگم که هر مستطیل حد اقل برابر چهار تا نقطه پردازش می خواد و برای اکثر آبجکتها که معمولا آدم هستن بیش از همون چهار نقطه نیاز نیست.
البته اینا تصوریه که بنده دارم و همون جوری که گفتم تستش نکردم به هر حال اگه شما تجربه عملی دارید و از این روش استفاده کردین نتیجه اش رو برای من هم بگید.
(در مورد کارایی و دقت هر روش نظر بقیه بچه ها رو هم بدونیم بد نیست.)
حالا از باندینگ باکس بگذریم، gm هم از همین ماسک استفاده میکنه. به نظر شما از چه ابزاری غیر از اون نقطه ها برای تکمیل این ایده میشه استفاده کرد؟

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
شهروز
مدیر انجمن
مدیر انجمن


تاريخ عضويت: جمعه 16 مرداد 1383
تعداد ارسالها: 3279
محل سكونت: Germany


1 شنبه 23 مهر 1385 - 00:24
پاسخ بصورت نقل قول
روش تشخيص برخورد در gm كه خيلي ساده است.
خود gm اين قابليت رو در نظر گرفته.

در event ها گزينه اي با نام collision وجود داره.
وقتي كه اون رو انتخاب كنيد از شما شيء مورد نظر براي برخورد رو مي خواد و بعد از اين كار عمليات مورد نظرتون رو كه در هنگام برخورد اين شي به شيء انتخابي بايد رخ بده در action قرار مي دهيد.

به همين سادگي.

_________________




استدیوی نرم افزاری بلوبالک
www.Bluebulk.info
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


1 شنبه 23 مهر 1385 - 11:21
پاسخ بصورت نقل قول
سلام شهروز جان
من اینا رو می دونم. قبلا با gm کار کردم. منظور بنده الگوریتمیه که gm به کار می بره اگه در مورد اون اطلاعی دارید بفرمایید.
خوب بچه ها همبن الان دو تا راه جدید یاد گرفتم که برای اطلاع شما اینجا می نویسم.
منتظر اظهار نظر همگی در مورد کارایی و محدودیتهای هر روش و روش های جدیدشون هم هستم.
اول روشی که از اون به عنوان lookup table یاد شده بود.
این روش دقتش کمه ولی کارایی بالایی داره.
صفحه دو بعدی رو به یک آرایه دو بعدی تبدیل می کنید و بسته به میزان دقت خواسته شده به ازای هر مستطیل یا مربع دلخواه از صفحه یک عنسر آرایه رو در نظر می گیرید بعد توی اون آرایه محل هر آبجکت رو ذخیره می کنید و در هر استپ از روی اون جدول میشه امکان بر خورد آبجکتها رو تشخیص داد.
البته این روش برای محیط سه بعدی هم قابل اجراست.
و اما روش دوم برای بررسی بر خورد چند ضلعی ها در صفحه به کار میره.
مبناش هم اینه برای تمام اضلاع دو چند ضلعی چک می کنیم که آیا خطی که از ادامه اون ضلع به وجود میاد بین دو چند ضلعی قرار میگیره یا نه در صورتی که ضلعی پیدا بشه که یه همچین خطی داشته باشه تصادم رخ نداده در غیر این صورت دو چند ضلعی با هم تداخل دارند.
جناب kochol به نظر میاد این بهتر از باندینگ باکس باشه. نظر شما چیه؟

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Ali
مدیر کل
مدیر کل


تاريخ عضويت: شنبه 20 تير 1383
تعداد ارسالها: 2983
محل سكونت: On the edge


1 شنبه 23 مهر 1385 - 12:52
پاسخ بصورت نقل قول
bounding rect برای تشخیص برخورد دو بعدی و bounding box برای تشخیص برخورد 3 بعدی استفاده میشه. در هر دو حالت موتور تشخیص برخورد میاد حداکثر فضای اشغال شده توسط یک جسم رو محاسبه میکنه ( در حالت 3 بعدی با یه مکعب و در حالت دو بعدی با یه صفحه ) و از این مستطیل برای تشخیص برخورد استفاده میکنه. اساس تشخیص برخورد روابط ریاضی حاکم بر نقطه ها و خط هاست و موتور چک میکنه که آیا این خط ها با هم تداخل دارن یا نه. از نظر سرعت هم این یکی از بهینه ترین راههاست. چرا که برای یه شکل پیچیده مثلا 30 وجهی، فقط یه مستطیل 4 وجهی برای تشخیص برخورد استفاده میشه. معمولا هم به این صورته که اسپریت هایی که برای تشخیص برخورد تو بازیهای دو بعدی به کار میرن بیشتر از 4 وجه دارن و یا اصلا گوشه های گرد دارن و رو این نظر استفاده از bounding rect روش خیلی ایده آلی به حساب میاد.

البته این تنها روش نیست و در تشخیص برخورد دقیق میان و از face ها بطور مستقیم استفاده میکنن. در این حالت bounding rect تا حد امکان به گوشه های جسم دو بعدی نزدیکه( مثلا با استفاده از یه ماسک) و تشخیص برخورد مستقیما روی face ها انجام میشه...

_________________
پی سی گیمرز - آرشيو بزرگ بازی های کامپیوتری
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


1 شنبه 23 مهر 1385 - 15:56
پاسخ بصورت نقل قول
نقل قول:
البته این تنها روش نیست و در تشخیص برخورد دقیق میان و از face ها بطور مستقیم استفاده میکنن. در این حالت bounding rect تا حد امکان به گوشه های جسم دو بعدی نزدیکه( مثلا با استفاده از یه ماسک) و تشخیص برخورد مستقیما روی face ها انجام میشه...

اگه اشتباه نکرده باشم منظور شما همون استفاده از یک آرایه از مسطیلها به جای یک مستطیله درست میگم؟
آیا توصیه شما هم استفاده از همین bounding rect هست؟
لطفا اگه روشهای دیگری هم (تو سیستم دو بعدی) بلدید بگید.

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


3 شنبه 25 مهر 1385 - 13:08
پاسخ بصورت نقل قول
به نظرم اگه از ترکیب دو روش lookup table و روش استفاده از ماسک استفاده بشه همه مشکلات حل میشه.
راهش هم اینه که اول با استفاده از lookup table امکان وجود برخورد رو بررسی میکنیم. مزیتش اینه که دیگه نیاز به چک کردن همه آبجکتها نیست. بعد اگه دیدیم که امکان برخورد وجود داره شروع به چک کردن آبجکتها میکنیم.
حتی تو این مرحله هم میشه از ترکیب دو روش bounding rect و روش استفاده از ماسک استفاده کرد یعنی اول چک می کنیم که آیا رکت هاشون با هم تداخل دارند بعد اگه تداخلی وجود داشت ماسکهاشون رو چک می کنیم.
با این شیوه تعداد فراخوانی متدی که رکتها رو چک میکنه خیلی کم میشه.(حد اکثر یک سوم کل آبجکتها (به نظر من)) و تعداد فراخوانی تابعی که ماسک ها رو چک میکنه زیر یک میشه(بازم به نظر من)).دیگه از این بهتر چی میخواید؟
البته به نظر من اصل صرفه جویی اونجاییه که ما همیشه مجبور به جستجوی تمام آبجکتها نیستیم.(یعنی همون lookup table)

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |