ورود

View Full Version : سوال: ساخت دریا با OpenGL



Hamid_VB
چهارشنبه 31 تیر 1388, 20:13 عصر
http://tinypic.info/files/yx5t1f7gwt2z5g78ayff.gif
سلام.
من می خوام با OpenGL آب طراحی کنم.
ولی توی کشیدن صفحه ی اصلی که موجای آب باید روش درست شند مشکل دارم.
من این صفحه رو با مثلثای پیوسته کشیدم.
http://tinypic.info/files/obckb7z9xehhsczv22yt.png
من موجایی که از افتادن یه جسم توی آب ساخته میشه رو طراحی کردم ولی موجایی که تصادفی روی سطح دریا ایجاد میشند رو نمتونم طراحی کنم.فکر کنم که فرمول خاصی دارند.
حالا فرمولای ریاضی و فیزیکش یه طرف ، نمی دونم چکار کنم که مثل آب واقعی شکست نور (روی texture) و درخشندگی داشته باشه.(قبلاً Texture_Gen_Q,S,T,R و *glMaterial رو امتحان کردم ولی فایده نداشت)

float rot_step=0,;
void Make_Sea()
{
float i,j;
float dxz,WATERCX,WATERCZ,WATERCY;
for(i = 0;i<=1;i=i+0.01){
rot_step += 0.2;
dxz = powf((powf(WATERCX,2)+powf(WATERCZ,2)),0.5);
WATERCY=(-0.02/dxz)*sin(((rot_step/5)*PI))*sin(((rot_step/5)*PI)+PI);
for(j=0;j<=1;j=j+0.01){
WATERCX=(i/2)*sin((j*2)*PI)+0.5;
WATERCZ=(i/2)*cos((j*2)*PI)+0.5;
water_points_positions_y[int(WATERCX*100)][int(WATERCZ*100)]=WATERCY;
}
}
glDepthMask(GL_FALSE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
glColor4f(0.4,0.5,0.9,0.8);
glBegin(GL_LINE_STRIP);
for(j=0;j<0.99;j=j+0.01){
for(i=0;i<0.99;i=i+0.01){
glVertex3f(i,water_points_positions_y[int((i)*100)][int((j+0.01)*100)],j+0.01);
glVertex3f(i,water_points_positions_y[int(i*100)][int(j*100)],j);
}
}
glEnd();
glDisable(GL_BLEND|GL_ALPHA_TEST);
glDepthMask(GL_TRUE);
}

pswin.pooya
پنج شنبه 01 مرداد 1388, 10:52 صبح
برای ساخت دریا باید از شیدرها استفاده کنی. اینجوری فایده نداره و برنامت خیلی کنید میشه. شیدرهای آماده اینکار توی نرم افزار رندر مانکی هستش.

seyedof
جمعه 02 مرداد 1388, 10:09 صبح
سلام

شبیه سازی دقیق موجهای آب کار راحتی نیست و از دینامیک سیالات باید استفاده کنید. اما روشهای Tricky استفاده میکنند. یک فرمول نویز هست به اسم Perlin Noise که در کارهای گرافیکی زیاد استفاده میشه. بدلیل اینکه سرعت بالایی داره، برای سطح آب چند اکتاو مختلف از این نویز رو ترکیب می کنند. الیته این یک قسمت از کار است و شما باید شیدرهای مختلفی برای انعکاس، عمق آب، Specular و شکست نور بنویسید تا طبیعی بشه.

ممنون علی

testers
یک شنبه 18 مرداد 1388, 17:27 عصر
دریات خیلی قشنگ شده موفق باشی

Hamid_VB
سه شنبه 27 مرداد 1388, 14:42 عصر
مرسی...:لبخندساده:

testers
سه شنبه 27 مرداد 1388, 16:13 عصر
دریا خیلی جالب شده ولی می شه بیشتر هم روش کار کرد