




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机 学院 专业 班 学号 姓名 协作者 无 教师评定 实验三OpenGL 交互式控制及简单光照明模型1、实验目的与要求1. 通过实验掌握OpenGL 中的交互式控制;2. 通过实验掌握例子intercontrol.c,并验证OpenGL 交互式控制方法;3. 通过实验设计修改例子intercontrol.c 的参数,分别达到以下要求:(1)按下键盘上的”V”键,三角形就沿着45 度角向上平移4.0f 距离;(2) 按下键盘上的”B”键,三角形就沿着45 度角向下平移4.0f 距离;4. 通过实验掌握例子slight.c,并验证OpenGL 简单光照明模型;2、实验方案请描述为达到实验的需要完成哪些方面的实验,列举出实验的基本要点和重点。实验:OpenGL 简单光照明模型,设计一个球体模型,产生光照效果。3、实验结果和数据处理实验:OpenGL 简单光照明模型#include #include #include #include struct Vector float fx, fy, fz;struct Color float Ir, Ig, Ib;float KaIa;/环境光强度float Kd, n;Vector H,light;Color mLight, mColor;GLboolean bLight = false;/利用圆的八向对称性生成圆上的点void CirclePt(int x0, int y0, int x, int y, Color mColor) glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glBegin(GL_POINTS); glVertex2i ( x+x0, y+y0);/x,y glVertex2i ( -x+x0, y+y0);/-x,y glVertex2i ( x+x0, -y+y0);/x, -y glVertex2i ( -x+x0, -y+y0);/-x, -y glVertex2i ( y+x0, x+y0);/y, x glVertex2i ( y+x0, -x+y0);/y, -x glVertex2i ( -y+x0, x+y0);/-y, x glVertex2i ( -y+x0,-x+y0);/-y, -x glEnd();/中点圆生成算法void MidCircle(int x0, int y0, int r, Color mColor) int x,y,deltax,deltay,d; x = 0; y = r; deltax = 3; deltay = 5-r-r; d = 1-r; CirclePt( x0, y0, x, y, mColor); while(xy) if(d0) d += deltax; deltax += 2; deltay += 2; x+; else d += deltay; deltax += 2; deltay += 4; x+; y-; CirclePt( x0, y0, x, y, mColor); /根据中点圆算法填充圆域void FlatCircle(int x0, int y0, int r, Color mColor) int x,y,deltax,deltay,d; x = 0; y = r; deltax = 3; deltay = 5-r-r; d = 1-r; glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glBegin(GL_POINTS); for(int i=-x;i=x;i+) glVertex2i (i+x0,y+y0); glVertex2i (i+x0,-y+y0); for(i=-y;i=y;i+) glVertex2i (i+x0,x+y0); glVertex2i (i+x0,-x+y0); while(xy) if(d0) d += deltax; deltax += 2; deltay += 2; x+; else d += deltay; deltax += 2; deltay += 4; x+; y-; for(i=-x;i=x;i+) glVertex2i (i+x0,y+y0); glVertex2i (i+x0,-y+y0); for(i=-y;i=y;i+) glVertex2i (i+x0,x+y0); glVertex2i (i+x0,-x+y0); glEnd();/初始化设定void Init() float mo; Vector eye; mLight.Ir = 0; mLight.Ig = 175; mLight.Ib = 0; KaIa=80; Kd = 1; n = 10; light.fx=0.50;light.fy=0.50; light.fz = sqrt(1-(light.fx*light.fx)-(light.fy*light.fy); eye.fx=0;eye.fy=0;eye.fz=1; H.fx=light.fx+eye.fx; H.fy=light.fy+eye.fy; H.fz=light.fz+eye.fz; mo=sqrt(H.fx*H.fx+H.fy*H.fy+H.fz*H.fz); H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo); H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo); glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH);/根据Phong模型计算光强Color Phong(int x0, int y0, int r, int x, int y) Vector N; float z,alpha,theta,Ks; Ks=1.0-Kd; z=sqrt(float)(r*r-(x-x0)*(x-x0)-(y-y0)*(y-y0); N.fx=(x-x0)*1.0/r; N.fy=(y-y0)*1.0/r; N.fz = z*1.0/r; theta = N.fx * light.fx + N.fy * light.fy + N.fz * light.fz; if(theta0) theta=0; alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz; if(alpha0) alpha=0; mColor.Ir=KaIa+mLight.Ir*Kd*theta+mLight.Ir*Ks*pow(alpha,n); mColor.Ig=KaIa+mLight.Ig*Kd*theta+mLight.Ig*Ks*pow(alpha,n); mColor.Ib=KaIa+mLight.Ib*Kd*theta+mLight.Ib*Ks*pow(alpha,n); return mColor;/根据计算的光强按球体的结果着色void Sphere(int x0, int y0, int r) int x,y,deltax,deltay,d; x = 0; y = r; deltax = 3; deltay = 5-r-r; d = 1-r; glBegin(GL_POINTS); for(int i=-x;i=x;i+) mColor=Phong(x0,y0,r,i+x0,y+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,y+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-y+y0); for(i=-y;i=y;i+) mColor=Phong(x0,y0,r,i+x0,x+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,x+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-x+y0); while(xy) if(d0) d += deltax; deltax += 2; deltay += 2; x+; else d += deltay; deltax += 2; deltay += 4; x+; y-; for(i=-x;i=x;i+) mColor=Phong(x0,y0,r,i+x0,y+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,y+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-y+y0); for(i=-y;i=y;i+) mColor=Phong(x0,y0,r,i+x0,x+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,x+y0); glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-x+y0); glEnd();void myDisplay() glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0f, 1.0f, 1.0f); Color clr; clr.Ir = 180, clr.Ig = 180, clr.Ib = 180; MidCircle(80, 240, 70, clr); FlatCircle(280, 240, 70, clr); Sphere(540, 240, 70); glFlush();void Reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);int main(int argc, char *argv) glutInit(&argc, argv);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司消防安全培训通知课件
- 《红楼梦》阅读指导课件
- 新课标幼儿园解读
- 胃管注意事项与护理规范
- 深化人才发展体制机制改革解读
- 慢性肾功能衰竭患者的护理
- 每季度科室护理质控报告
- 泥石流工作总结
- 2025房屋租赁合同样本 房屋租赁合同范本
- 公司晨会课件
- 2026中国银行股份有限公司上海分行计划招聘550人考试参考题库及答案解析
- ERCP护理题库及答案解析
- 2025年百里香酚行业研究报告及未来行业发展趋势预测
- 2025年网络信息安全技术岗位专业知识试卷及答案解析
- 2025四川广元市园区建设投资集团有限公司招聘13人考试模拟试题及答案解析
- 检验员技能测试题及答案
- 化学原电池教学课件
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人考试参考试题及答案解析
- 新疆劳动就业白皮书课件
- 视觉障碍老人护理指南
- 宠物医院建设方案(3篇)
评论
0/150
提交评论