动画与图形Opengl报告.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动画与图形Opengl报告

动画与图形设计 院  系: 专  业: 学  号: 姓  名: 选做题目号码:6 目录 一、应用程序的界面 ----------------------------------------------1 二、三维球体的绘制1、球体绘制方法研究2、面分解法的实现2.1 面分解函数2.2 初值的选取2.3 球体的实现、三角形绘制函数、三角面法向量函数、点的模长扩展函数、南北极法的实现 三、 一、应用程序的效果界面 本OpenGL应用程序的效果界面主要由二部分构成,其一是参数控制栏,其二是视图显示窗。如下图如示。当通过左边的控制面板来修改球体参数时,右边的视图窗口即会显示出用户操作所产生的效果。 二、三维球体的绘制思想 1、球体绘制方法研究 OpenGL绘制几何图形,本人认为关键的一步在于建立物体的几何模型。我们通过不同的规则来对同一个物体建模,将会得到很不相同的结果。把物体的模型建设好,即能用数学表达式来表达或说构建出一个物体,那么用OpenGL将其画出来或说表达出来,将不会是一件很困难的事情。如何建立球体模型呢? 由于我们实际的生活经验不难发现,地球可以抽象为一个理想的球体,而地球的定位一般是通过经度纬度值。也就是说只要有二个参数就基本上可以确定一个球体上的点的几何位置。基于此,首先可用经纬特征来构建一个球体模型。假想好球体也分为南北二极,再选取一个点为经度的零点,这样便可以把球体想成是由很多的水平圆和竖直圆来包围着的。而这些圆与圆的交点就构造出了很多的小平面,我们画球的目的就是要将这些小平面一个个画出来。每个小平面再分为二个三角面,这样使每个经纬相交的点对应着二个小三角面。4个顶点由经纬度是容易确定的,从而2个小三角面也就易于在OpenGL中勾画出来。如下图所示: 当然,像球这样规则的几何体还有一个更普通的建模方法,在此简称为面分解法:即是先想像出构造出该物体的最小单元,由此画出逼近物体最粗糙或说最失真的图形。再由该最失真图形一步步细化,从而慢慢逼近最真实的图形。球体可以想像是由很多的小三角面构成,球体最粗糙的图形可以认为是一个正4面体,它的面分解法原理是将每个三角面分再分为更小的三角面,其过程表述如下:取初始三角形三边上的中点,将该三点模长扩展为球体半径长度,再将原始三点与现在三点结合,构成了4个小三角形。其图形表示如下: 2、面分解法的实现 2.1 面分解函数 参数v1,v2,v3为初始三角面的三个顶点向量,count记录当前要分解的级数,也就是当前该面要进行等分的次数。若count = 0,则不需要等分,而直接以初始三个顶点画三角面。若count = 1,则要等分一次,若count = 2,则要进行二次等分,最终该原始三角面将被分为1*4*4 = 16个。依次类推。程序实现代码如下: void CVRworkView::SubDivide(float *v1, float *v2, float *v3, int count) { //count为等分级数 if(0 = count) //count=0,则画由三点构成的三角形 { DrawTriangle(v1,v2,v3); } else { GLfloat v12[3],v23[3],v31[3]; GLint i; for(i = 0; i 3; i++){ v12[i] = (v1[i]+v2[i])/2; //求取等分的中点坐标 v23[i] = (v2[i]+v3[i])/2; v31[i] = (v3[i]+v1[i])/2; } Normalize(v12,(float)m_nRadius); //将所得中点进行模长扩展 Normalize(v23,(float)m_nRadius); Normalize(v31,(float)m_nRadius); SubDivide(v1,v12,v31,count-1); //对所产生的4个新的三角面再进行等分 SubDivide(v2,v23,v12,count-1); SubDivide(v3,v31,v23,count-1); SubDivide(v12,v23,v31,count-1); } } 2.2 初值的选取 2.1介绍的是针对一个普通面的分解办法,进行其操作的前提是要已知经初始的三个顶点。实际中初始面(初始图形)的设计是有一定艺术水平的。初始图形构造的好,不仅图形的空间位置易于确定,而且也容易构造出更逼真的图形。在一般的参考书上,球体的初始图形是一个正20面体,当然,这是一个很好的办法。但在本次设计中,球体的初始图形设置为由6个点构成的8面体,之所以这样做,是因为这样更有利于理解球体图形的生成

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档