View Full Version : OpenGL Particle
Hamid_VB
چهارشنبه 24 تیر 1388, 17:43 عصر
من یه موتور Particle با OpenGL نوشتم ولی یه مشکل کوچیک دارم.
وقتی ذره ها رو Draw می کنم اگه قبلش شکلی رسم شده باشه ذره ها همیشه جلوی شکل دیده میشند اگه هم بعدش شکلی رسم بشه ذره ها همیشه پشت شکل دیده میشند(مثل demo ضمیمه). البته می دونم که بخاطر disable کردن DEPTH_TEST این مشکل پیش اومده ولی بدون disable کردنش نمی تونم ذره ها را درست بکشم. می خوام طبیعی باشه. لطفا کمک کنید...
من قبل از رسم هر ذره این کدو نوشتم:
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND|GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
Nima_NF
چهارشنبه 24 تیر 1388, 19:34 عصر
بدون Depth test ذرات و پیکسل ها نمی توانند موقعیت خود را تشخیص دهند، پس اشتباه رسم می شوند، برای Particle ها حتما باید فعال باشد.
باید ببینید که با فعال گذاشتن Depth test در کجای سایر کدها اشتباه کرده اید که می گویید درست رسم نمی شوند.
مثلا به جای خط سوم به شکل زیر می توانید عمل کنید:
glBlendFunc(GL_ONE , GL_ONE);
یا برای دود به این شکل:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
pswin.pooya
چهارشنبه 24 تیر 1388, 19:46 عصر
برای چی تست عمق رو غیر فعال کردی؟! برای رسم ذره ها می تونی از تست عمق استفاده بکنی. موردی رو که باید غیر فعال بکنی چرخش داخل ماترس نمامدل هستش. در حقیقت فقط جابجایی و مقیاس رو باید اعمال کنی.
Hamid_VB
چهارشنبه 24 تیر 1388, 19:47 عصر
امتحان کردم ولی بازم جواب نداد...:ناراحت:
DEPTH_TEST حتما باید Disable باشه .
Hamid_VB
چهارشنبه 24 تیر 1388, 19:53 عصر
منظورتون از چرخش داخل ماترس نمامدل چیه؟
pswin.pooya
چهارشنبه 24 تیر 1388, 22:01 عصر
نگفتی برای چی تست عمق رو غیر فعال میکنی.
یعنی هر glRotate رو که استفاده کردی باید صفر کنی که همیشه ذره ها به سمت تو دیده بشن. بهترین راه برای اینکار به نظر من استفاده از شیدرها هستش.
seyedof
پنج شنبه 25 تیر 1388, 08:32 صبح
سلام
دلیلش اینه که شما احتمالا توی Screen Space دارین پارتیکل هاتون رو محاسبه میکنید و میکشید یعنی در واقع دو بعدی است نه سه بعدی. باید پارتیکل سیستم شما کاملا در World Space باشد و اوون موقع Depth Buffer رو باید فعال نگه دارید تا همه چیز درست کشیده شود. البته باز هم کار داره. برای ترسیم پارتیکل نباید Depth Buffer رو غیر فعال کنید.
ممنون علی
kochol
پنج شنبه 25 تیر 1388, 10:14 صبح
سلام
مشکلت رو وقتی که بافر عمق فعال است بگو چون اون مشکلتو شاید بتونیم حل کنیم ولی مشکلی رو که الان گفتی نمی شه حل کرد.
Hamid_VB
پنج شنبه 25 تیر 1388, 10:59 صبح
از جواباتون ممنونم.
اگه Lesson19 سایت NeHe رو دیده باشید اونجا هم برای رسم ذره ها Depth Test رو غیر فعال کرده.
اگه ذره ها سه بعدی باشه وقتی واسه ی دود 1000 ذره واسه ی آتیش 1000 ذره و ... رسم بشه سرعت برنامه خیلی پایین میاد یا شاید کلاً هنگ کنه. من ذره هارو با دو تا صفحه ی عمود بر هم کشیدم. البته شاید بشه با مثلث پیوسته یه شکل سه بعدی کوچیک کشید. ولی نمی دونم چه جوری؟
من توی برنامه از *glRotate اصلا استفاده نکردم و همه ی چرخشارو با نسبتای مثلثاتی انجام دادم.
شایدم طبیعی که ذرها اینجوری دیده میشند !!؟؟
من برنامه ام رو بدون غیر فعال کردن DEPTH TEST اینجا گذاشتم.
Nima_NF
پنج شنبه 25 تیر 1388, 12:56 عصر
تو سایت Nehe حالت Depth test را به خاطر این غیر فعال کرد که روی پس زمینه سیاه بود و جز particle چیز دیگری هم در تصویر نبود که نیاز باشد بی خودی پردازنده برای آن مصرف شود، این طوری نمایش آن سریع تر می شود. و هدف هم چیزی شبیه screen saver بود.
اما شما که می خواهید در محیط سه بعدی و با نمایش اجسام مختلف کار کنید نمی توانید depth را غیر فعال کنید، در نتیجه هیچ پیکسلی خودش نمی تواند بفهمد در چه عمقی هست، باید پشت پیکسلی رسم شود یا جلوی آن، به این شکل این مسئولیت شما می شود که خودتان هر ذره particle را به شکل front-to-back رسم کنید(از نزدیک به دوربین شروع کنید به رسم تا به دورترین از دوربین) تا حتی اگر depth test فعال باشد دیگر نیازی به صرف پردازنده عمل تست عمق برای رسم نباشد.(این موضوع مهمی برای رسم particle ها هست)
ضمنا در نظر بگیرید که با توجه به کارت های گرافیکی قوی امروزی برای حجم بالای ذرات حتما با شیدرها particle ها را ایجاد کنید.
در مورد اشکالی که در برنامه شما می بینم، همان رسم اشتباه Blend و Alpha هست که دور های سیاه particle های شما، به جای حذف شدن رسم می شود. یعنی به نوعی Invert کار را انجام می دهید. نوع blend را خود را تغییر دهید (و حتما front-to-back را رعایت کنید).
pswin.pooya
پنج شنبه 25 تیر 1388, 13:30 عصر
سیستم های ذره ای با توجه به آمدن شیدر مدل چهار و OpenGL 3.x دارن وارد یه نسل جدید میشن. که علاوه بر سرعت بیشتر ، قدرت پردازش بیشتری رو هم دارن. اما با همون روش قبلی هم به کمک شتابدهنده های ذره ای OpenGL ، 60000 تا هم بدون دردسر رسم میشه و فریم روی 60 fps میمونه من این مساله رو روی 8500 تست کزدم. استفاده از شیدرها برای رسم ذرهها به مراتب بهتره و سرعت بیشتری رو داره و حتی میتونی مواردی مانند blending رو به کمک اونها انجام بدی.
AliyerEdon
پنج شنبه 25 تیر 1388, 14:28 عصر
فریم برنامت خیلی خیلی پایینه!! چرا؟
Hamid_VB
پنج شنبه 25 تیر 1388, 16:03 عصر
چون تعداد ذره های فواره 8000 تاست!!!
البته نیازی به این تعداد نیست.
seyedof
پنج شنبه 25 تیر 1388, 19:10 عصر
سلام
برای بالا رفتن سرعت میتونید از Instancing استفاده کنید. توی DirectX 9c به بالا پشتیبانی میشه ولی توی OpenGL نمیدونم. این قابلیت برای رسم تعداد زیادی از یک شی ولی با Transform های متفاوت استفاده میشه و تاثیر زیادی در سرعت داره.
در مورد Particle چون معمولا نیمه شفاف است باید از عقب به جلو کشیده بشن چون اگر برعکس این باشه وقتی ذره جلویی رسم بشه دیگه هیچ چیزی اعم از ذره و غیر ذره که پشت اوون قرار بگیرن کشیده نخواهد شد چون مقدار عمق اوونا دورتره.
ممنون علی
Nima_NF
پنج شنبه 25 تیر 1388, 21:35 عصر
در مورد Particle چون معمولا نیمه شفاف است باید از عقب به جلو کشیده بشن چون اگر برعکس این باشه وقتی ذره جلویی رسم بشه دیگه هیچ چیزی اعم از ذره و غیر ذره که پشت اوون قرار بگیرن کشیده نخواهد شد چون مقدار عمق اوونا دورتره.
شرمنده، الآن که شما این مورد را نوشتید فهمیدم که اشتباها گفتم front-to-back .
در حالی که منظورم برعکس بود، یعنی همین چیری که جناب seyedof گفتند Back-to-front درست هست. (کلا برای تمام مواردی که قصد blend داریم باید همین طور عمل کنید)
تشکر بابت تذکر
pswin.pooya
جمعه 26 تیر 1388, 01:40 صبح
سلام
برای بالا رفتن سرعت میتونید از Instancing استفاده کنید. توی DirectX 9c به بالا پشتیبانی میشه ولی توی OpenGL نمیدونم. این قابلیت برای رسم تعداد زیادی از یک شی ولی با Transform های متفاوت استفاده میشه و تاثیر زیادی در سرعت داره.
در مورد Particle چون معمولا نیمه شفاف است باید از عقب به جلو کشیده بشن چون اگر برعکس این باشه وقتی ذره جلویی رسم بشه دیگه هیچ چیزی اعم از ذره و غیر ذره که پشت اوون قرار بگیرن کشیده نخواهد شد چون مقدار عمق اوونا دورتره.
ممنون علی
الحاقی ARB_POINT_SPRITEبرای سیستم های ذره ای توی OpenGL 2.0 معرفی شدش و nv_pointsprite هم که قبل از اون برای اینکار بودش. برای instancing که بیشتر به درد شکلهای سه بعدی میخوره میتونی از دستورglDrawElementsInstancedEXT استفاده کنی که تحت الحاقی http://www.opengl.org/registry/specs/EXT/draw_instanced.txt معرفی میشه. instancing واقعی توی شیدر مدل چهار به بعد وجود داره و علتش هم وجود چند الحاقی جدید هستش. خودت میتونی اینکار رو به کمک شیدرهای geomtry به سادگی انجام بدی. ولی ظاهرا دایرکت به صورت نرم افزاری ( یعنی شبیه سازی شده هم تحت شیدر مدلهای پایین تر پشتیبانی میکنه که هیچ فایده ای نداره چون باز هم همون حجم ورتکس رو باس gpu قرار میگیره.)
pswin.pooya
جمعه 26 تیر 1388, 01:48 صبح
کوچول:
سلام خوبی آقا؟. ظاهرا OGL3 ( که فعلا هیچ داکیومنت درست و حسابی ازش پیدا نمیشه). این مشکل رو حلش کرده. ( در مورد این مطلب مطمن نیستم و تنها توی فرومها دیدم). اما به کمک بافر عمق دوگانه میشه این مشکل رو حلش کرد و دیگه نیازی به OGL3 نیستش:
http://developer.download.nvidia.com/SDK/10.5/opengl/samples.html#dual_depth_peeling
kochol
جمعه 26 تیر 1388, 10:01 صبح
سلام
من فکر کنم که مشکلت اینه که داری از quad برای رسم استفاده می کنی که مشکلی که پیش می یاره اینه که یه ذره که جلو هست رو می کشه و دورش هم می بره ولی ذره بعدی رو که می خواد بکشه و پشت اون هست تو تست عمق رد می شه و کشیده نمی شه به خاطر همین به نظر می یاد که ذره جلویی دورش بریده نشده است که این طور نیست.
کاری که باید بکنی همونی هست که pswin گفت باید از ARB_POINT_SPRITE استفاده کنی.
اگر راه حل دیگری پیدا کردم بهت می گم
Hamid_VB
جمعه 26 تیر 1388, 10:14 صبح
درسته..
همینه.باید شکلارو از عقب به جلو کشید.
ولی اینکه Depth Test باید غیر فعال باشه رو مطمعنم...
در مثال Lesson19 ذره ها به شکل مربع های 2D رسم شدند و به همین دلیل از چپ یا راست یا بالا و پایین نمیشه دیدشون (فقط از جلو و عقب) ولی من ذره ها رو به با دو صفحه ی عمود بر هم رسم کردم که علاوه بر جلو و عقب بشه از راست و چپ هم دیده شون.
من مثال Lesson19 رو با فعال کردن Depth Test گذاشتم. فقط دوربینو جلوتر بردم و ذره هارو کوچیکتر کردم. خودتون نتیجشو ببینید !!!
یه مثال دیگه از سایت GameProgrammer.org گذاشتم. البته خودم Depth Test رو فعال کردم.(توی مثال اصلی Depth Test غیر فعال بود)
pswin.pooya
جمعه 26 تیر 1388, 12:30 عصر
اگه میتونی شکلها رو بر اساس عمق مرتب کنی که انجام ندادن depth_test کمکت میکنه ولی این به شرطی هستش که بتونی برای همه اجسام اینکار رو بکنی. اگه مشکلت تنها سرعت هستش. بهتره که همون الحاقی استفاده بکنی. البته استفاده ار VAO و VBO هم میتونه کمک بزرگی بهت بکنه.
seyedof
جمعه 26 تیر 1388, 15:13 عصر
سلام
فکر کنم دیگه از Point Sprite برای Particle System زیاد استفاده نمی کنند شاید دلیلش محدودیتهایی باشه که داره. به جاش از Textured Quad استفاده می کنند. ما یکبار با Point Sprite پیاده کردیم خیلی اذیت کرد و محدود بود. چند تا Middleware دیدم از Point Sprite استفاده نکرده بودند.
راستی Instnacing هم vs_3_0 به بالا میخواد.
ممنون علی
Nima_NF
جمعه 26 تیر 1388, 18:38 عصر
سلام
فکر کنم دیگه از Point Sprite برای Particle System زیاد استفاده نمی کنند شاید دلیلش محدودیتهایی باشه که داره. به جاش از Textured Quad استفاده می کنند. ما یکبار با Point Sprite پیاده کردیم خیلی اذیت کرد و محدود بود. چند تا Middleware دیدم از Point Sprite استفاده نکرده بودند.
تو بحث DirectX که این چند ساله تقریبا همگی روی GPU این کار را می کنند.
من در کارهای خودم با DirectX 9 از Point Sprite برای particle ها استفاده کردم، و در نسخه 10 هم از همان Geometry shader باید استفاده کنیم (که آزادی عمل بیشتر می شود)، تا حالا با محدودیت خاصی هم برخورد نکردم...
هر کتاب جدید مبتنی بر شیدری هم که دیدم تاکید بر استفاده از Point Sprite و اعمال روی gpu داشت چون خیلی راحت می توان تعداد رسم آن ها را متناسب با کارت گرافیک افراد محدود کرد، در غیر این صورت Textured Quad که از همان نسخه های اولیه opengl یا directx بدون هیچ پیش نیاز خاصی شدنی بود!
در هر حال، در نهایت این بستگی به خود سازنده بازی دارد که می خواهد آن را با CPU پیاده کنید یا GPU.
pswin.pooya
جمعه 26 تیر 1388, 21:06 عصر
سلام
فکر کنم دیگه از Point Sprite برای Particle System زیاد استفاده نمی کنند شاید دلیلش محدودیتهایی باشه که داره. به جاش از Textured Quad استفاده می کنند. ما یکبار با Point Sprite پیاده کردیم خیلی اذیت کرد و محدود بود. چند تا Middleware دیدم از Point Sprite استفاده نکرده بودند.
راستی Instnacing هم vs_3_0 به بالا میخواد.
ممنون علی
من کتاب MOGL رو برای POINT_SPRITEها خوندم و ا اونجا که میدونم به جای textured quad ها که چهار راس نیاز دارن یک نقطه میفرسته ( یعنی یک راس) و بعد از اون تکسچر رو روشون اعمال میکنه. شما نباید مسالی رو که داخل دایرکت مطرح هستش با OGL اشتباه بگیرید. دایرکت سعی میکنه یکسری از بهینه سازی ها رو انجام بده که بر عکس اون GL دقیقا روالی رو که براش مشخص شده طی میکنه و جزءیات کامل رو هم برای اینکار میخواد. برای instancing هم حتما شیدر مدل چهار میخواد ( حداقل تحت OGL) . توی لینک الحاقی که به شما دادم به این موضوع اشاره کرده. من گفتم که امکان داره دایرکت از اون تحت شیدر مدلهای پایین تر پشتیبانی کنه و علتش هم شبیه سازی نرم افزاری دایرکت تو مواقعی هستش که ساپورت سخت افزاری نباشه. ولی اصول نمونه برداری بر میگرده به قابلیت قسمت geomtry ، gpu . این مساله برای اولین بار رو nv توی سری هشت معرفیش کرد ( تا اونجایی که من میدونم) .
استفاده نکردن از POINT STRIPE میتونه دلایل مختلفی داشته باشه. نمونه اون میتونه استفاده از geomtry های پیچیده برای سیستم های ذره ای باشه. مشکل بزرگی که تو سیستم های ذره ای هستش اشغال شده باس سیستم توسط حجم بزرگ مبادله داده هستش که نتیجتا هم باعث بالا رفتن cpu usage و هم پایین اومدن سرعت gpu میشه. اینکار رو میشه به روشهای مختلف کاهش داد که با توجه معرفی الحاقی های جدید داخل شیدر مدل چهار ، OpenGL 3.0 و سری هشت به بالا nv این مشکلات رو به صورتی زیادی حل کردش. البته تحت شیدر مدلهای پایینتر هم میشه سرعت رو به صورت قابل توجهی بالا بردش. اما با معرفی شیدر مدل چهار به قول nv سیستم های ذره ای وارد یک نسل دیگه شدن. همنطور که سیدف عزیز اشاره کردن کم کم POINT_SPRITEها دارن به فراموشی سپرده میشن اما هنوز یک راه حل بسیار خوب و ساده هستند.
kochol
شنبه 27 تیر 1388, 20:52 عصر
سلام
اگه بخوای سیستم ذره ای رو تو هر فریم بر اساس فاصله شون نصبت به دوربین سورت کنی که 100 ذره هم نمی تونی بکشی.
ولی اینکه Depth Test باید غیر فعال باشه رو مطمعنم...
من هم مطمئنم که باید فعال باشه :)
من بازم point sprite رو پیشنهاد می کنم ولی این کاری رو که می گم بکن ببین درست می شه یا نه.
1- تمام اشیا رو بکش بجز سیستم ذره ای
2- برای رفع مشکلی که گفتم یه راه است اونم اینه که بافر عمق رو غیر فعال نکنی ولی بجاش نوشتن تو بافر عمق رو غیر فعال کنی.
glDepthMask(GL_FALSE);
3- سیستم ذره ای رو رسم کن.
4- دوباره نوشتن تو بافر عمق رو فعال کن.
glDepthMask(GL_TRUE);
این کار دقیقا درست نیست ولی فکر کنم بهترین روشی است که با OpenGL 1.2 می تونی استفاده کنی و نتیجش باید مثل زمانی بشه که بافر عمق رو غیر فعال می کنی.
در مثال Lesson19 ذره ها به شکل مربع های 2D رسم شدند و به همین دلیل از چپ یا راست یا بالا و پایین نمیشه دیدشون (فقط از جلو و عقب) ولی من ذره ها رو به با دو صفحه ی عمود بر هم رسم کردم که علاوه بر جلو و عقب بشه از راست و چپ هم دیده شون.
فکر نکن کار درستی کردی باید از Billboard برای این منظور استفاده کنی.
Billboard یه مربع ای است که همیشه رو به دوربین است از هر جهتی که نگاه کنی.
راستی Instnacing هم vs_3_0 به بالا میخواد.
Instnacing اشیا بدون انیمیشن شیدر 3 نمی خواد و با شیدر 2 کار می کنه (مثال Instnacing سایت nvidia از شیدر 2 استفاده می کنه) ولی Instnacing اشیا متحرک دارای انیمیشن اسکلتی شیدر 3 می خواد اون هم به این دلیل است که اطلاعات انیمیشن اسکلتی رو داخل یه تکستچر می ریزند و فقط شیدر 3 به بعد قابلیت خوندن تکستچر را در vertex shader دارد.
pswin.pooya
شنبه 27 تیر 1388, 22:20 عصر
Instnacing اشیا بدون انیمیشن شیدر 3 نمی خواد و با شیدر 2 کار می کنه (مثال Instnacing سایت nvidia از شیدر 2 استفاده می کنه) ولی Instnacing اشیا متحرک دارای انیمیشن اسکلتی شیدر 3 می خواد اون هم به این دلیل است که اطلاعات انیمیشن اسکلتی رو داخل یه تکستچر می ریزند و فقط شیدر 3 به بعد قابلیت خوندن تکستچر را در vertex shader دارد.
این توضیحات ریجیستری الحاقیهای OpenGL هستش:
Name
EXT_draw_instanced
Name Strings
GL_EXT_draw_instanced
Contact
Michael Gold, NVIDIA Corporation (gold 'at' nvidia.com)
Status
Shipping for GeForce 8 Series (November 2006)
Version
Last Modified Date: May 9, 2008
Author Revision: 1.5
Number
327
Dependencies
OpenGL 2.0 is required.
EXT_gpu_shader4 or NV_vertex_shader4 is required.
این امکان وجود داره که instancing تحت شرایط خاص تحت الحاقی های دیگه با شیدر مدلهای دیگه کار کنن ولی اون چیزی که اینجا نشون میده NV_vertex_shader4 هستش. تحت این الحاقی فقط یه فراخوان رسم رو انجام میدید که به هر رسم یک ID داده میشه که داخل شیدر به کمک متغییر gl_InstanceID میشه مقدار اون رو خوندش. توضیحات کاملی توی این ضمینه داخل متن موجود هستش:
http://www.opengl.org/registry/specs/EXT/draw_instanced.txt
Hamid_VB
یک شنبه 28 تیر 1388, 10:46 صبح
خیلی خیلی خیلی خیلی ....ممنونم..
1- تمام اشیا رو بکش بجز سیستم ذره ای
2- برای رفع مشکلی که گفتم یه راه است اونم اینه که بافر عمق رو غیر فعال نکنی ولی بجاش نوشتن تو بافر عمق رو غیر فعال کنی.
;(glDepthMask(GL_FALSE
3- سیستم ذره ای رو رسم کن.
4- دوباره نوشتن تو بافر عمق رو فعال کن.
;(glDepthMask(GL_TRUE
مشکلم حل شد.:لبخند:
البته قبلاً سوالمو توی تالار Opengl نوشته بودم.
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=260837&
و همین جوابو گرفته بودم.
اگه میشه در مورد قشنگ تر شدن ذره ها کمک کنید...
kochol
دوشنبه 29 تیر 1388, 09:38 صبح
سلام
خوشحالم که مشکلت حل شد.
ولی راجع به billboard هم تحقیق کن چیز سختی نیست ولی در عوض سرعت رو 2 برابر می کنه.
منظورتو از قشنگ تر شدن ذره ها نمی فهمم.
این امکان وجود داره که instancing تحت شرایط خاص تحت الحاقی های دیگه با شیدر مدلهای دیگه کار کنن ولی اون چیزی که اینجا نشون میده NV_vertex_shader4 هستش. تحت این الحاقی فقط یه فراخوان رسم رو انجام میدید که به هر رسم یک ID داده میشه که داخل شیدر به کمک متغییرgl_InstanceID میشه مقدار اون رو خوندش. توضیحات کاملی توی این ضمینه داخل متن موجود هستش:
من اول راجع به Instnacing در دایرکت 3 دی بگم که چی هست. البته نمی خوام زیاد توضیح بدم.
برای اینکه به جای استفاده از دستور DrawIndexedPrimitive (اگه درست گفته باشم) با یک بار صدا زدن DrawIndexedPrimitive بشه چندتا مش یکسان رو کشید روش Instnacing برای Direct3D اومد که با شیدر 2 قابل پیاده سازی است.
اما در اپن جی ال که دستور DrawArray خیلی سریع تر از d3d است روش دیگری وجود دارد که نمی خواد ماتریس های world رو برای هر شی push و pop کنی و ماتریس world رو بصورت تکسکورد به شیدر می فرستی که به این روش pseudo instancing می گن.
این الحاقی هم من نمی دونم چیه ولی در ظاهر همون کاری رو می کنه که d3d انجام می ده.
render multiple instances of an object with a single draw call
Hamid_VB
چهارشنبه 31 تیر 1388, 18:58 عصر
کار کردن با billboard هم سرعتو افزایش میده هم دیگه نیازی به غیر فعال کردن تست عمق نداره... دارم روش کار می کنم.
Hamid_VB
شنبه 10 مرداد 1388, 15:50 عصر
ببخشید دوباره مزاحم شدم...
تونستم Particle ها رو با billboard درست کنم.
float alpha_rotition = (180*(atan(((cam1.eye_x-cam1.aim_x))/((cam1.eye_z-cam1.aim_z)))/M_PI));
glRotatef(alpha_rotition,0,1,0);
ولی می خوام آتیش و دود رو طبیعی تر کنم.
دنبال Texture طبیعی تر ، واسه ی آتیشه ودوده ام.
لطفا اگه کسی Texture طبیعی تری داره یا پیشنهادی داره کمکم کنه.
ممنون.:لبخندساده:
kochol
یک شنبه 11 مرداد 1388, 10:42 صبح
کار کردن با billboard هم سرعتو افزایش میده هم دیگه نیازی به غیر فعال کردن تست عمق نداره... دارم روش کار می کنم.
سلام
چرا نیاز نیست که نوشتن تو عمق رو غیر فعال کنی؟
Hamid_VB
دوشنبه 12 مرداد 1388, 17:39 عصر
شرمنده..
حق با شماست.:خجالت:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.