View Full Version : سوال: ساخت سایه
Hamid_VB
سه شنبه 09 تیر 1388, 14:14 عصر
چطوری میشه توی OpenGL سایه درست کرد؟
درست کردن سایه روی plane راحته ولی روی یه شکل Polygon چطوری میشه سایه درست کرد؟:اشتباه:
pswin.pooya
سه شنبه 09 تیر 1388, 14:40 عصر
برای درست کردن سایه هایی که planar نباشن باید از تکنیک volumetric shadow استفاده کنی و یا تکنیک های دیگه رو مثل shadow maping رو استفاده کنی. یه مرجع کامل داخل سایت nvidia هستش:
developer.nvidia.com
Hamid_VB
سه شنبه 23 تیر 1388, 21:42 عصر
من هر چی توی سایت developer.nvidia.com گشتم نتونستم بفهمم که چه جوری میشه مختصات نقاط اطراف یه شکلو بدست اورد (برای ساخت سایه) و چه جوری میشه با داشتن یه معادله ی خط فهمید که امتداد اون خط به کدوم یکی از شکلای load شده میرسه تا روی اون سایه ساخته بشه...:گیج:
اصلا Enable کردن GL_STENCIL_TEST چه فایده ای داره ؟
و چه جوری میشه Light Map ساخت ؟
اگه یه مثال ساده معرفی کنید ممنون میشم...:لبخند:
seyedof
چهارشنبه 24 تیر 1388, 10:18 صبح
سلام
نمونه کد Stencil Shadow داخل SDK دیرکت ایکس رو ببینید، باید کدش رو بخونید تا متوجه بشید. اوونه از نقطه تابش نور به جسمی که میخواهید سایه اش ایجاد بشه یک سری خطوط ترسیم میکنه و یک مش میسازه، البته با یک روش ابتکاری که با خوندن کدش متوجه میشین. بعد این مش حاصل را که در واقع Shadow Volume یا منطقه سایه است رو روی Stencil Buffer میکشه. در مرحله بعد با کمک همون Stencil نقاطی رو که داخل این Volume بودن تیره میکنه مثل اینکه اوونها داخل سایه قرار گرفتن.
با توضیح نمیشه متوجه شد، شما کد اوون Sample رو بخونید. در OpenGL هم میشه همون روش رو عینا استفاده کرد فقط توابع عوض میشن.
ممنون علی
Hamid_VB
چهارشنبه 24 تیر 1388, 11:08 صبح
راستش آموزشای SDK دایرکت ایکس رو دیده بودم ولی فایده نداشت... نتونستم بفهمم که چه جوری میشه مختصات نقاط اطراف یه شکلو بدست اورد و چه جوری میشه با داشتن یه معادله ی خط فهمید که امتداد اون خط به کدوم یکی از شکلای load شده میرسه که اگه این دوتا رو بفهمم می تونم سایه درست کنم.
planar shadowsرو همین جوری درست کردم ولی Shadow volumes و Hybrid approaches و Light maps نمی دونم چه جوری درست میشه...
اگه PDF یا مثال خوبی دارید کمکم کنید.ممنون
seyedof
پنج شنبه 25 تیر 1388, 08:28 صبح
راستش آموزشای SDK دایرکت ایکس رو دیده بودم ولی فایده نداشت... نتونستم بفهمم که چه جوری میشه مختصات نقاط اطراف یه شکلو بدست اورد و چه جوری میشه با داشتن یه معادله ی خط فهمید که امتداد اون خط به کدوم یکی از شکلای load شده میرسه که اگه این دوتا رو بفهمم می تونم سایه درست کنم.
سلام
نیازی نیست که تقاطع خطوط رو با اشکال محیط بدست بیارین. نکته اش توی اوون قسمته که مرز Shadow Volume رو با حذف کردن یک سری Edge های اضافی بدست میاره. اگر فرصت کنم کدش رو میخونم و براتون شرح میدم.
ممنون علی
Hamid_VB
یک شنبه 04 مرداد 1388, 11:19 صبح
فهمیدم چه جوری میشه Shadow Volume ساخت.
ولی هنوز یه مشکلی دارم...
نمی دونم چه کار کنم که وقتی دوربین زیر صفحه ای که قراره سایه اش ساخته بشه قرار می گیره ، سایه هنوز وجود داشته باشه و از بین نره...
من این کدو واسه ی رسم سایه نوشتم:
void CreateShadows(){
Draw_Shadow_Volume(); //Make List 1 For Shodow Volume Planes
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
Display(); //Render Object's In Masked Mode
glEnable( GL_CULL_FACE );
glEnable( GL_STENCIL_TEST );
glDepthMask( GL_FALSE );
glStencilFunc( GL_ALWAYS, 0, 0 );
glStencilOp( GL_KEEP, GL_KEEP, GL_INCR );
glCullFace(GL_FRONT );
glCallList( 1);
glStencilOp( GL_KEEP, GL_KEEP, GL_DECR );
glCullFace( GL_BACK );
glCallList(1);
glDepthMask( GL_TRUE );
glDepthFunc( GL_LEQUAL );
glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );
glStencilFunc( GL_EQUAL, 1, 1);
glDisable( GL_LIGHT0 );
Display(); //Render Shadowed Part
glStencilFunc( GL_EQUAL, 0,1);
glEnable( GL_LIGHT0 );
Display(); //Render Light Part
glDepthFunc( GL_LESS );
glDisable( GL_STENCIL_TEST);
}
seyedof
یک شنبه 04 مرداد 1388, 23:03 عصر
سلام
فکر کنم باید Culling رو در نظر بگیرید.
ممنون علی
Hamid_VB
چهارشنبه 07 مرداد 1388, 11:55 صبح
نمی تونه به خاطر اون باشه.
kochol
یک شنبه 11 مرداد 1388, 00:05 صبح
سلام
این یک مشکل معمول هست که اتفاق می افته و این مشکل رو جان کارمک حل کرده البته من الگوریتمشو بلد نیستم ولی در مورد الگوریتم z-fail تحقیق کن روشی که الان استفاده می کنی z-pass است این روش سریعتر است ولی همون مشکلی رو که گفتی داره اکثر موتور های پدر مادر دار با باندینگ باکس چک می کنن که الان باید از z-fail استفاده کنند یا از z-pass
kochol
یک شنبه 11 مرداد 1388, 00:14 صبح
http://www.gamedev.net/reference/articles/article1873.asp
http://artis.imag.fr/Publications/2005/HHLH05/hhlh-zp-plus.pdf
kochol
یک شنبه 11 مرداد 1388, 10:30 صبح
سلام
این مقاله از nvidia هم خوبه فکر کنم روش های culling سایه رو هم نشون داده باشه
http://developer.nvidia.com/object/fast_shadow_volumes.html
Hamid_VB
یک شنبه 11 مرداد 1388, 15:59 عصر
خیلی خیلی مممنونم...:تشویق:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.