欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    图形学场景设计.docx

    • 资源ID:9917732       资源大小:557.83KB        全文页数:16页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    图形学场景设计.docx

    1、图形学场景设计计算机图形学课程设计报告题 目 自然场景设计 院(系、部) 专 业 班 级 学 号 姓 名 成 绩 1 设计目的与要求1.1设计题目 自然场景设计1.2 设计目的 以小组合作的方式绘制一个自然场景,给绘制的实体添加纹理光照效果, 进一步巩固所学知识,提高团队合作能力 1.3 设计要求(1)采用真实感图形学技术设计一个自然场景(2)模拟出水、云、山体等至少三种景物(3)实现场景的漫游(4)对设计出的图像进行光照处理(5)将图片的纹理贴附到物体表面2 总体设计2.1 功能简介创建一个900*600的Windows窗口,在窗口中显示冰箱、电灯、茶壶三个实体,根据电灯位置在地面上绘制个实

    2、体的投影;为茶壶添加纹理;利用键盘的方向键控制冰箱旋转,实现场景漫游2.2 功能模块图2.3 软件各模块功能介绍2.3.1冰箱和茶壶的绘制由四边形拼接出冰箱,通过平移旋转函数放置到指定位置,同时实现茶壶的绘制,在茶壶上添加纹理效果,通过平移旋转变换放置到冰箱上面2.3.2顶灯的绘制绘制出一个带灯罩的电灯,并且将光源放置在灯泡的位置2.3.3 设置光照设置光照的各种参数,为场景添加光照效果,让实体具有立体效果2.3.4 纹理图片生成用数组存储一幅自己设计的纹理图片,方便实体添加纹理效果时的调用2.3.5 影子生成根据需求为场景中的实体添加阴影效果,使得场景效果更加逼真2.3.6 法向量设置为场景

    3、设置法向量,确保实体在不同的角度都能被看到3 详细设计及关键代码3.1 光照模块详细设计3.1.1 光照设置功能设置光照的各种参数,为场景添加光照效果,让实体具有立体效果3.1.2 光照设置设计 1设置光照的初值包括:环境光照强度、漫反射光照强度、镜面反射光照强度、光源位置 2在实体绘制函数中开启光照效果3.1.3 具体代码实现GLfloat ambientLight = 0.3f, 0.3f, 1.3f, 1.0f ;GLfloat diffuseLight = 0.7f, 0.7f, 0.7f, 1.0f ;GLfloat specular = 1.0f, 1.0f, 1.0f, 1.0f

    4、 ;GLfloat lightPos = 346.0f, 400.0f, -20.0f, 0.0f ;GLfloat specref = 1.0f, 1.0f, 1.0f, 1.0f ;void light(void)/光照函数 GLfloat points33 = -30.0f, -149.0f, -400.0f , -30.0f, -149.0f, -420.0f , 40.0f, -149.0f, -420.0f ; glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glFrontFace(GL_CCW); / Counter c

    5、lock-wise polygons face out glEnable(GL_CULL_FACE); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ambientLight); glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuseLight); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,75); glLightfv(GL_LIGHT0,GL_AMBIENT,a

    6、mbientLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight); glLightfv(GL_LIGHT0,GL_SPECULAR,specular); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR, specref); glMater

    7、iali(GL_FRONT, GL_SHININESS, 128); glClearColor(0.4f, 0.3f, 0.6f, 1.0f); glDepthFunc(GL_LESS); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glFrontFace(GL_CW); 3.1.4 光照设置限制条件光源位置设置必须在预先设置好的空间中3.2 纹理模块设置3.2.1 纹理设置模块功能用数组存储一幅自己设计的纹理图片,通过设置对应坐标在指定的实体上添加纹理效果3.2.2 纹理添加模块设计1.利用三维数组存储纹理图片中每个点的颜色值,在给实体

    8、添加纹理时调用纹理图片生成函数,将三维数组中存储的纹理图案添加到实体上2.从文件中读取一张图片,按照需要将纹理图片添加到对应的实体上3.2.3 纹理添加模块数据结构描述 1. 所用数据结构为一个三维数组,用于存储纹理图片的每点颜色值 2.文件存储纹理图片3.2.4 纹理添加模块具体实现代码 1.纹理图片自己绘制void Get_Mandeldrot_image(void)/生成纹理图片 double min_a,max_a,min_b,max_b,step_a,step_b,a,b; int n=64,x,y,k,t; /n=180 for a Julia set float scale=25

    9、5.0/n,width=300,height=400; for (x=0; xwidth; x+) /b=min_b; for ( y=0; y.纹理图片由文件读入AUX_RGBImageRec *LoadBMP(char *Filename) / 载入位图图象 FILE *File=NULL; / 文件句柄 if (!Filename) return NULL; File=fopen(Filename,abc); if (File) fclose(File); return auxDIBImageLoadA(Filename); return NULL; int LoadGLTextures

    10、() int Status=FALSE; AUX_RGBImageRec *TextureImage1; memset(TextureImage,0,sizeof(void *)*1); if (TextureImage0=LoadBMP(menu.bmp) Status=TRUE; glGenTextures(1, &texture0); glBindTexture(GL_TEXTURE_2D, texture0); / 生成纹理 glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage0-sizeX, TextureImage0-sizeY, 0, GL

    11、_RGB, GL_UNSIGNED_BYTE, TextureImage0-data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); / 线形滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); / 线形滤波 if (TextureImage0) if (TextureImage0-data) free(TextureImage0-data); free(TextureImage0); return Status; / 返回 Sta

    12、tus 3.2.5 纹理添加模块限制条件纹理图片添加时应注意比例3.3 法向量设置模块3.3.1 法向量设置模块功能为场景设置法向量,确保实体在不同的角度都能被看到3.3.2 法向量设置模块设计首先用两个点算出一个向量,用同样的方法计算出另外一个向量,对求的的两个向量做笛卡尔积求出平面的法向量3.3.2 法向量设置模块数据结构利用数组存储每个点的坐标值3.3.4 法向量设置模块具体实现代码void calcNormal(float v33, float out3) float v13, v23; static const int x = 0; static const int y = 1; s

    13、tatic const int z = 2; / Calculate two vectors from the three points v1x = v0x - v1x; v1y = v0y - v1y; v1z = v0z - v1z; v2x = v1x - v2x; v2y = v1y - v2y; v2z = v1z - v2z; / Take the cross product of the two vectors to get / the normal vector which will be stored in out outx = v1y * v2z - v1z * v2y;

    14、outy = v1z * v2x - v1x * v2z; outz = v1x * v2y - v1y * v2x; / Normalize the vector (shorten length to one) ReduceToUnit(out);3.4 影子生成模块详细设计3.4.1 影子生成模块功能根据需求为场景中的实体添加阴影效果,使得场景效果更加逼真3.4.2 影子生成模块设计将所需要添加阴影效果的实体与投影面做求交运算,得到一个边界,将这个区域填充为黑色实现阴影效果3.4.3 影子生成模块具体实现代码void DrawJet(BOOL bShadow) float normal3;

    15、 / Storeage for calculated surface normal / Nose Cone / / Set material color, note we only have to set to black / for the shadow once if (!bShadow) glColor3ub(0, 255, 200); Else设置填充颜色为黑色glColor3ub(0, 0, 0);实体各点坐标3.5 顶灯绘制模块3.5.1 顶灯绘制模块功能绘制出一个带灯罩的电灯,并且将光源放置在灯泡的位置3.5.2 顶灯绘制模块设计1.灯泡的绘制调用OpenGL库函数glutSol

    16、idSphere()绘制一个球并为其添加颜色2.灯罩绘制和电线绘制调用OpenGl库函数glBegin(GL_QUADS)绘制一个独立填充四边形为其设置颜色,通过平移变换放置到合适位置,电线绘制与灯罩绘制方法类似3.5.3 顶灯绘制模块具体实现代码void draw_lamp()/绘制电灯 glColor3f(.0f,.0f,.0f); glBegin(GL_QUADS);/电线 glVertex3f(345,500,-200); glVertex3f(347,500,-200); glVertex3f(347,380,-200); glVertex3f(345,380,-200); glEn

    17、d(); glColor3f(.0f,1.0f,.0f);/灯罩 /glBegin(GL_TRIANGLES); glBegin(GL_QUADS); glVertex3f(347,380,-200); glVertex3f(367,360,-200); glVertex3f(325,360,-200); glVertex3f(345,380,-200); glEnd(); glColor3f(2.0f,2.0f,.0f);/灯泡 glTranslated(346.0f, 362.0f, -200.0f); glScalef(0.4,0.4,0.4); glutSolidSphere(25.0

    18、f, 10, 10);3.5.4 顶灯绘制模块限制条件绘制实体时应该注意绘制的先后顺序,最先绘制的实体将遮挡后面绘制的实体3.6 冰箱和茶壶绘制模块3.6.1 冰箱茶壶绘制模块功能由四边形拼接出冰箱,通过平移旋转函数放置到指定位置,同时实现茶壶的绘制,在茶壶上添加纹理效果,通过平移旋转变换放置到冰箱上面3.6.2 冰箱茶壶绘制模块设计1.冰箱绘制调用OpenGL库函数glBegin(GL_QUADS)根据设计要求绘制独立填充四边形,由多个四边 形 组合成冰箱2.茶壶绘制调用OpenGL库函数glutSolidTeapot( );绘制一个茶壶,通过平移旋转变换放置到指定位置3.6.3 冰箱茶壶绘

    19、制模块具体实现代码 绘制冰箱void draw_refrigerator()/绘制冰箱 glPushMatrix(); glColor3f( 0.0f,1.0f,0.0f); glTranslated(210.0f, 230.0f, -40.0f); glScalef(0.6,0.6,0.6); glRotatef(yRot, 0.0f, 1.0f, 0.0f); glutSolidTeapot(12);/绘制茶壶 glPopMatrix(); glPushMatrix(); glColor3f(.0f,.0f,.0f); glBegin(GL_LINES); glVertex3f(210.0

    20、f, 230.0f, -40.0f); glVertex3f(165,200,-50); glVertex3f(210.0f, 230.0f, -40.0f); glVertex3f(215,200,-50); glVertex3f(210.0f, 230.0f, -40.0f); glVertex3f(190,210,-90); glVertex3f(210.0f, 230.0f, -40.0f); glVertex3f(240,210,-90); glEnd(); glColor3f(.0f,.0f,.0f); glBegin(GL_QUADS); glVertex3f(165,100,-

    21、50); glVertex3f(165,102,-50); glVertex3f(215,102,-50); glVertex3f(215,100,-50); glEnd(); glColor3f(.0f,.0f,.0f); glBegin(GL_QUADS); glVertex3f(165,130,-50); glVertex3f(165,132,-50); glVertex3f(215,132,-50); glVertex3f(215,130,-50); glEnd(); glColor3f(2.0f,2.0f,2.0f); glBegin(GL_QUADS); glVertex3f(18

    22、5,180,-50); glVertex3f(190,180,-50); glVertex3f(190,165,-50); glVertex3f(185,165,-50); glEnd(); glColor3f( 0.5f,0.5f,1.0f); glBegin(GL_QUADS); glVertex3f(165,30,-50); glVertex3f(165,200,-50); glVertex3f(215,200,-50); glVertex3f(215,30,-50); glEnd(); glColor3f( 1.0f,1.0f,1.0f); glBegin(GL_QUADS); glV

    23、ertex3f(165,200,-50); glVertex3f(190,210,-50); glVertex3f(240,210,-50); glVertex3f(215,200,-50); glEnd(); glBegin(GL_QUADS); glVertex3f(240,210,-50); glVertex3f(240,50,-50); glVertex3f(215,30,-50); glVertex3f(215,200,-50); glEnd(); glPopMatrix();3.6.4 冰箱茶壶绘制模块限制条件绘制四边形时四个顶点的先后顺序需要根据法向量的方向设置3.7 场景顶视图4 程序生成界面图形5 参考文献1 杨钦,徐永安,翟红英. 计算机图形学M.北京:清华大学出版社,2005,03(1):70-173


    注意事项

    本文(图形学场景设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开