View Full Version : سیستم ذره ای
1485159
دوشنبه 17 آبان 1389, 22:04 عصر
سلام
من الان در حال حاضر یک سیستم ذرهای برای فضای 2 بعدی نوشته ام. اما مهمترین مشکلی که داره سرعتش هست!!! با جستجویی که کردم فهمیدم که استفاده از point sprite میتونه مفید باشه ولی بعدش چندجا خوندم که نه اینم دیگه قدیمی شده و البته منبع آموزشی خوب هم براش پیدا نکردم! .... و چندا استفاده از شیدر ها رو هم توصیه کرده بودند ولی نه من بلدم باهاش کار کنم و نه این که میخوام باهاش کار کنم! آخه نمیخوام فردا یکی بیاد بگه من نتونستم برنامت رو اجراش کنم!!
من برای رسم از glBegin و glEnd استفاده میکنم! استفاده از glDrawElements میتونه مفید باشه؟
حالا برای رفع مشکل باید چیکار کنم؟ منبع چی؟
ممنون.
pswin.pooya
دوشنبه 17 آبان 1389, 22:30 عصر
glDrawElements میتونه تا حد زیادی سرعت رو افزایش بده. همینطور point spriteهم میتونه سرعت رو افزایش بده. برای تعداد ذره بالا بیشتر ۱۰۰،۰۰۰ ذره برای هر سیستم ذره ای استفاده از شیدر بهتره و میتونی تعداد زیادی رو با سرعت بالا رندر کنی اما شیدرها محدودیت وضعیت (state) دارن و پیاده سازی سیستمهای ذره ای چند وضعیته با اونها به نظر خوب نمیاد
تکنیک های زیادی برای افزایش سرعت وجود داره کافیه یه سرچ بزنی.
1485159
سه شنبه 18 آبان 1389, 05:46 صبح
glDrawElements میتونه تا حد زیادی سرعت رو افزایش بده.
نسبت به glBegin و glEnd چقدر سریع تره؟
همینطور point spriteهم میتونه سرعت رو افزایش بده.
نسبت به glDrawElements چقدر سریع تره؟
برای تعداد ذره بالا بیشتر ۱۰۰،۰۰۰ ذره برای هر سیستم ذره ای
برای یکی از سیستم های ذره ای موجود در صحنه یا کلشون؟ مثلا ممکنه یکی برای آتش باشه و یکی برای دود، منظورتون تعداد ذره های موجود در کل صحنه هست یا مثلا تعداد ذره ای موجود در سیستم ذره ای آتش؟ یا دود؟ ..... اگه منظورتون فقط یکیش هست که تعداد ذره ها حدود 800 تا هست. و برای رسم هر ذره حدود 100 پیکسل باید رسم بشه.
تکنیک های زیادی برای افزایش سرعت وجود داره کافیه یه سرچ بزنی.
من که نتونستم پیدا کنم. اگه ممکنه شما یه منبعی رو معرفی کنید.
ممنون.
pswin.pooya
سه شنبه 18 آبان 1389, 10:39 صبح
نسبت به glBegin و glEnd چقدر سریع تره؟
خیلی سریعتر هستش. توی این حالت به جای اینکه ورتکسها یکی یکی فرستاده بشن. یک بافر مستقیما فرستاده میشه.
قل قول: همینطور point spriteهم میتونه سرعت رو افزایش بده. نسبت به glDrawElements چقدر سریع تره؟
point sprite یه جالت geometry هستش که باعث میشه شما برای هر ذره فقط رنگ و موقعیت رو ارسال کنید و مواردی همانند texcoord و ورتکسها خودشون داخل کارت گرافیک ساخته میشن که نتیجتا باس سیستم مشغول نمیشه و سرعت بالا میره معمولا این روش تا هفت برابر ار اشغال شدن باس سیستم جلوگیری میکنه مثلا محدودیت ۱۰۰ هزار رو به ۷۰۰ هزار میرسونه. میشه از point spriteها همزها glDrawElements هم استفاده کرد.
نقل قول:
برای تعداد ذره بالا بیشتر ۱۰۰،۰۰۰ ذره برای هر سیستم ذره ای
برای یکی از سیستم های ذره ای موجود در صحنه یا کلشون؟ مثلا ممکنه یکی برای آتش باشه و یکی برای دود، منظورتون تعداد ذره های موجود در کل صحنه هست یا مثلا تعداد ذره ای موجود در سیستم ذره ای آتش؟ یا دود؟ ..... اگه منظورتون فقط یکیش هست که تعداد ذره ها حدود 800 تا هست. و برای رسم هر ذره حدود 100 پیکسل باید رسم بشه.
این تعداد محدود به کل ذره ها و اندازه باس سیستم هستش. اگر سیستم قوی باشه و یه باس سریع داشته باشه این تعداد بیشتر میشه اما توی MOGL گفته سعی کنید از این تعداد تجاوز نکنه تا یک سازگاری خوب داشته باشید.
نقل قول:
تکنیک های زیادی برای افزایش سرعت وجود داره کافیه یه سرچ بزنی.
من که نتونستم پیدا کنم. اگه ممکنه شما یه منبعی رو معرفی کنید.
ممنون.
روشها که خیلی زیاده. مثلا توی کتاب Introduction to game programming with DX 9.0C از یک بافر مثل vbo استفاده میکنه و توی هر ارسال دستور رسم یک قسمت از اون رو به روز و رسم میکنه که باعث مبشه در حالی که GPU داره رسم میکنه CPU هم محاسبات بقیه ذره ها رو انجام بده.
یا توی Gpu Gems و خیلی جاهای دیگه اشاره به استفاده از glDrawInstance شده.
1485159
سه شنبه 18 آبان 1389, 13:41 عصر
این تعداد محدود به کل ذره ها و اندازه باس سیستم هستش. اگر سیستم قوی باشه و یه باس سریع داشته باشه این تعداد بیشتر میشه اما توی MOGL گفته سعی کنید از این تعداد تجاوز نکنه تا یک سازگاری خوب داشته باشید.
با توجه به توضیحاتی که در مورد سیستم ذره ای مورد نظرم دادم آیا glDrawElements میتونه جواب بده؟
در ضمن بهتره که ذره ها رو بصورت تکسچر دربیارم و بعد هرکدوم رو رسم کنم یا اینکه خودم پیکسل پیکسل رسم کنم؟
به استفاده از glDrawInstance شده.
این دیگه چیه؟ گوگل هم هنگ کرد!!!:لبخند:
pswin.pooya
سه شنبه 18 آبان 1389, 14:16 عصر
با توجه به توضیحاتی که در مورد سیستم ذره ای مورد نظرم دادم آیا glDrawElements میتونه جواب بده؟
میتونی مطمئن باشی که نسبت به روش قبلی که استفاده میکردی خیلی بهتره. کلا از OpenGL 3.0 به بعد استفاده از glBegin و glEnd منسوخ شده و شما حداقل باید از glDraw*ها استفاده بکنید.
در ضمن بهتره که ذره ها رو بصورت تکسچر دربیارم و بعد هرکدوم رو رسم کنم یا اینکه خودم پیکسل پیکسل رسم کنم؟
این یکی رو متوجه نشدم؟! اما استفاده از تکسچر میتونه نتیجه بهتری برای شکل ذره ها داشته باشه. اما اگر منظورت تکسچرهای float و شیدر هستش باید دقت کنی این نوع تکسچرها رو کارتهای گرافیکی کمی ساپورت میکنن. (البته میشه گفت تقریبا 100 درصد کارتهای بعد از سری Geforce 5 اونها رو ساپورت میکنن) اما بازم نمیشه روشون برای همه سیستمها حساب باز کرد.
1485159
سه شنبه 18 آبان 1389, 14:26 عصر
میتونی مطمئن باشی که نسبت به روش قبلی که استفاده میکردی خیلی بهتره. کلا از OpenGL 3.0 به بعد استفاده از glBegin و glEnd منسوخ شده و شما حداقل باید از glDraw*ها استفاده بکنید.
برای رسم هر ذره از glDrawElements استفاده کنم یا همشون رو یکجا رسم کنم؟
این یکی رو متوجه نشدم؟!
درک میکنم..... آخه کار عجیبی دارم میکنم!!!! من تمام عکس ها 2 بعدی رو پبکسل به پیکسل خودم رسم میکنم!!! منظورم اینه که برای ذره ها هم از این روش استفاده کنم یا نه؟ اصلا روشی که استفاده میکنم خوبه یا نه؟
اما اگر منظورت تکسچرهای float و شیدر هستش باید دقت کنی این نوع تکسچرها رو کارتهای گرافیکی کمی ساپورت میکنن.
نه بابا همون تسکچر خودمون رو میگم. سریعترین راه تسکچر برای سیستم ذره ای چیه؟
ممنون.
pswin.pooya
سه شنبه 18 آبان 1389, 14:28 عصر
درک میکنم..... آخه کار عجیبی دارم میکنم!!!! من تمام عکس ها 2 بعدی رو پبکسل به پیکسل خودم رسم میکنم!!! منظورم اینه که برای ذره ها هم از این روش استفاده کنم یا نه؟ اصلا روشی که استفاده میکنم خوبه یا نه؟
نه. این همه دستور OpenGL داره! مشکل چیه که پیکسل پیکسل رسم میکنی؟
نه بابا همون تسکچر خودمون رو میگم. سریعترین راه تسکچر برای سیستم ذره ای چیه؟
GL_RGBA
1485159
سه شنبه 18 آبان 1389, 14:47 عصر
این همه دستور OpenGL داره!
مثلا؟
مشکل چیه که پیکسل پیکسل رسم میکنی؟
ندانستن راهی بهتر!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.