ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:35.09KB ,
资源ID:8553087      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8553087.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程实验指导光照Word格式.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

课程实验指导光照Word格式.docx

1、a)光源在无穷远处,即光线方向为常数;b)视点在无穷远处,即视线方向V为常数;c)用近似这里H为和V的角平分向量,在这种简化下,由于对所有的点总共只需计算一次H的值,节省了计算时间。结合R颜色模型,Phong光照明模型最终有如下的形式: 本次实验中,光源在无穷远处,光线方向为单位向量L(0., 0.5, 0.707),视点在无穷远处,视线方向V为(, 0, 1)。本次实验中增加了鼠标右键操作,相关知识见后面所附GLUT菜单知识。.实验代码:/ Lightcpp : Defiete entry pont f th onsoe pplicatio./nlude stdaxhnclud#nclude

2、 sto.hinclde stdlb.h#icluedfin O_LIHT 1#defne LIGHT2bol bLiht =fas;srut Vetofoat fx,fy, z;srct Cooflat r, I, b;float K;fla Kd,n;Vecor H,ight;Cl ig,mCl;voi Iit() loat mo; Vctoreye; mLgt.Ir= 0; might.g= 175; mLght.I ;KIa=100; 07; n = 0; lghtf=0.5;ight.fy0.50; lihfz = srt(1-(light.fx*light.fx)-(lght.f*

3、light.); eyex=0;y.fy=0;yefz=; H.=igt.xeye.; fy=lgt.fy+eye.fy;H.igh.fz+ey.fz; msqt(H.fx*.x+H.fy*H.fy+.fzH.fz); H.fx=(.fx/m);Hfy=(.fy/m);f=(H.fz/mo);H.fx=(.mo);Hy=(H.fy/m);Hz=(Hfzmo);lCarC(1, 1.0, 1.0, 0.0); glhdeMoe(_ST);Coor Po(nx0, int y,it r, i , i y)Vecto N; float z,alpha,thet,Ks; K10d;z=qr(flot)

4、(r*r-(x0)*(x-0)-(y-y0)*(y-y0);N=(xx0)*1.0/; N.=(y-y)*1.0/r;N.z =/r;tet =Nx* lightfx+ N.y * ight. + N.z *liht.z;if(t0)het0; lp=H.fxN.+.fyN.fy+H.fx*N.fz; i(alpha)alpa=;Colr.Ir=KaIa+mLight.Ir*KdtetamLigIr*Ks*p(alha,);mCoog=KaI+Li.Ig*Kd*theta+mht.IgKsp(alha,n);mColor.Ib=KaIa+migh.I*thetamg.IKspw(alha,);

5、 retu molr;vd MidCircle(it x0, i 0, in r) it ,deltax,dlay,d; =; y= r; deltx = 3; detay= 5r-r; = 1r; glColor3f (0.0f,1.0,0.0f); gBgin(G_OINT);glVertex2i(x+x0,+y0);gerte2i (x+0,y+y0); lVerte2i (-xx0,-yy0); gertex2i (x+x0,y+0); lVertex2i(y+y, xx0);glVerte2i (y+0, x+x0);lte2i (-y+,xx);lVrtx2i(-y+y0, xx0

6、); while(x) f(d0) += deltax; elt+= 2; detay + 2; x+; else d += deltay; delta = ; deltay += 4; +; y-; gVetex2(x+x0,+y0); gVertex2i (-x,yy0); erxi (-+x0,-yy);glere2i (x+x0,-y+y0); glVerexi (y0,x+x0);glVere2i (+y0, x+x); glrei (y+y0, -x+0);glVertex2i (-y+y0, x+x0); glEd();void MidCircleLight(in x0,int

7、y0, nt ) intx,y,deltax,dly,d; = ; r;dlax =3; dtay r-r; d = 1-r; lBgin(LPOTS); for(ti=-x;i;i+) mor=Phon(x0,y0,r,i+x0,y+y);glolr3b(mClor.I, mColr.Ig, mColorIb); lVert2i(i+0,y0); glolor3ub (ColorIr, mClor.Ig, molorb); glVrtei (i+x,yy0); or(i=y;=y; mColo=Phon(x0,y0,r,i+x0,x+0); lColor3u (mClor.Ir, mCl,

8、Colr.Ib);lVee2i (i+x,+0);gColor3ub (mColor.r,mlorIg, mCoorIb); glertexi (i+0,-x+0); hile(xy) (d += deta;delt+; elay + ; +; ese d = elty; detx = 2; delay + ; x+; y-; fr(ix;=x; mClo=Phong(x0,y0,r,+x0,y0); glCo3 (moor.I,Coor.I, mCol.I); lrex2i (i0,y+y0); gCoor3b (mColr.Ir, mColr.I, mClrIb); lVetex2i (i

9、+x0,-yy); fr(i-y;i=y;i+) mColo=Phong(x0,y0,r,i+x0,x+y0); glColor3u(mColor.I, mColor.g,mColorIb); gVrtex2 (ix,+0); glolorub (molor.I, moor.I, mCorIb); glertx2 (i+,x+y0);gnd();voidmyDisplay()lClar(GL_OOR_B_IT);glCol3(1.0f, .f,1.f);if(bigh =false) MidCile(250,250, 60); lse MidCircleLigh(250, 50, 60); l

10、Flus();void eap(i w,t h)gliewort(0, 0, (GLizei) , (GLszei) h);glMatrixMde(L_PROJECTIN);gLoadIentity();gluOrth2D(0.0, (GLdoub) w, 0, (GLdoube);oiprocesMnuEe(int ption) swich (option) caseNOLGT: bLght fale; gluPsRedisplay(); rak;cas GH: Lght = true; glutPosteislay(); rea;void ctGLMens() intmnu; menu =

11、 lurateMeu(prcesnuEent);glutdenEntry(No Ligh,NO_IHT);glutAdMuEny(Liht,LIGHT);gltahMenu(GLT_RIGBTON);n in(int argc, ch *rgv) glutnit(&ar, agv); gluIniDispaMod(GUTRGB | GLUTSINGL); glutInitWindwPsiton(10, 100);gltIntiSize(640, 480); glutCeateWindo(Hello World!); nit();glutDisplayFunc(myDsply); gluehap

12、Func(eshpe); creaGLUTMeu();guainLoop();retu;附GL菜单知识:给一个程序增加菜单提供了一个比键盘更简单的方法来和程序交互,选择不同选项,而不用去记那些按键。首先要做的是创建菜单,创建菜单函数glutCteMe的原型如下:int glCeM(void (*un)(i value);参数:func:为新建的菜单处理菜单事件的函数名。这个函数的返回值是菜单的标识符(me idnifier)。程序中,对每个菜单要指定一个回调函数,而且可以指定相同的函数。下面为菜单增加一些条目,使用的函数是glutAddMenuntry:void gutAddMeuEtry(chr*name,int value);参数: nam:菜单名称的字符串。 vlue:当你选择菜单里的一项后,这个值就返回给上面的lutCeteenu里调用的函数。这个函数根据函数名来看,就是给菜单里添加条目的,可以一直添加,但有个顺序。最后要把菜单和一个鼠标键连接起来(ttch)。因为我们必须指定菜单怎么出现,使用GLUT你可以在按下一个鼠标按键后让菜单显示,函数是gtAachenu:oi gluAttahnu(int buttn); butto: 一个整数,指定菜单和哪个鼠标键关联起来。btton可以去下面的值; GLUT_LFTBUTO L_IDDEBUONLU_IGHT_BUTTON

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2