计算机图形学试验.pptVIP

  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文档。上传文档
查看更多
允许用户在这个世界中游走和遍历 根据用户的指令旋转并变换镜头位置。 围绕原点,以与镜头相反的旋转方向来旋转世界。(让人产生镜头旋转的错觉) 以与镜头平移方式相反的方式来平移世界(让人产生镜头移动的错觉)。 程序实现效果 参考程序 试验10 飘动的旗帜 #include math.h // 引入数学函数库中的Sin 旗帜是由由44格×44格的小方格子依次组成。使用points数组来存放网格各顶点独立的x,y,z坐标。 float points[ 45 ][ 45 ][3]; // Points网格顶点数组 // 沿X平面循环 for(int x=0; x45; x++) { // 沿Y平面循环 for(int y=0; y45; y++) { // 向表面添加波浪效果 points[x][y][0]=float((x/5.0f)-4.5f); points[x][y][1]=float((y/5.0f)-4.5f); points[x][y][2]=float(sin((((x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f)); } } 绘制组成旗帜的44×44个小网格,形成旗帜第一帧 glBegin(GL_QUADS); // 四边形绘制开始 for( x = 0; x 44; x++ ) // 沿 X 平面 0-44 循环(45点) { for( y = 0; y 44; y++ ) // 沿 Y 平面 0-44 循环(45点) { float_x = float(x)/44.0f; // 生成X浮点值 float_y = float(y)/44.0f; // 生成Y浮点值 float_xb = float(x+1)/44.0f; // X浮点值+0.0227f float_yb = float(y+1)/44.0f; // Y浮点值+0.0227f glTexCoord2f( float_x, float_y); // 第一个纹理坐标 (左下角) glVertex3f( points[x][y][0], points[x][y][1], points[x][y][2] ); glTexCoord2f( float_x, float_yb ); // 第二个纹理坐标 (左上角) glVertex3f( points[x][y+1][0], points[x][y+1][1], points[x][y+1][2] ); glTexCoord2f( float_xb, float_yb ); // 第三个纹理坐标 (右上角) glVertex3f( points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2] ); glTexCoord2f( float_xb, float_y ); // 第四个纹理坐标 (右下角) glVertex3f( points[x+1][y][0], points[x+1][y][1], points[x+1][y][2] ); } } glEnd(); // 四边形绘制结束 不断更新绘制小网格。形成旗帜飘动效果 // 用来降低波浪速度(每隔2帧一次) if( wiggle_count == 2 ) { for( y = 0; y 45; y++ ) // 沿Y平面循环 { hold=points[0][y][2]; // 存储当前左侧波浪值 for( x = 0; x 44; x++) // 沿X平面循环 { // 当前波浪值等于其右侧的波浪值 points[x][y][2] = points[x+1][y][2]; } points[44][y][2]=hold; // 刚才的值成为最左侧的波浪值 } wiggle_count = 0; // 计数器清零 } wiggle_count++; // 计数器加一 程序运行效果 参考程序 试验11 二次几何体 // 绘制圆柱体 glTranslatef(0.0f,0.0f,-1.5f); // 绘制圆锥 gluCylinder(quadratic,1.0f,0.0f,3.0f,32,32); (顶面半径为0 的特殊圆柱体) 参数1(1.0F)是圆柱体的底面半径,参数2(1.0F)是圆柱体的饿顶面半径,参数3(3.0F)是圆柱体的高度。参数4(32)是纬线(环绕Z轴有多少细分),参数5(32)是经线(沿着Z轴有多少细分)。细分越多该对象就越细致。我们可以用增加细分的方法来增加对象的多边形数。 // 绘制圆盘gluDisk(quad

文档评论(0)

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

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

1亿VIP精品文档

相关文档