- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验45-3D图形旋转+消隐
实验要求 在2D屏幕上绘制3D图形 说明:为数据简单起见,用多边形表示面 3D如何表示(画在)成2D? 3D如何表示(画在)成2D? 向XOZ坐标平面作正投影 投影结果1 投影结果2 前提:坐标变换 坐标变换 顶点变换 绕z轴转15度 凸面立体 消隐 Hidden-surface Removal Main idea of convex CG中立体由小三角面片构成 凸面:一个凸面,要么全部能看见,要么全部看不见 判断是否能看见:取该面上的任意一点,若该点可见,则该面可见;否则,该面不可见。 判断点是否可见:眼睛和该点连线与该点法线夹角 夹角90°(人眼视角,左边90°+右边90°=180°),不可见。 不计算夹角度数,如何得出:夹角90° 平面法矢量 所以立方体6个面的法矢量 消隐原理 原理: 注意1:保留原数据 注意2:原点位置 求得新坐标系下的 后,矩形以原点为中心对称的,而屏幕原点在左上角,因此最后画图时要平移到中心位置, 平移值较合适在: 注意3:平面法矢量 用多边形表示一个面时,要统一按一定方向逆时钟/顺时钟方向 注意4:视角方向 用多边形表示一个面时,要统一按一定方向逆时钟/顺时钟方向 注意5:int运算结果 Int * int =int 而计算某凸面矢量时,用到float temp 写成: temp=(float)p[8].x*pv[i].x+(float)p[8].y*pv[i].y while(getch() != ) { cleardevice(); rotate(vv,v,9); rotate(vector,pv,6); render(v); //在新位置上更新 } setlinestyle(DASHED_LINE,0, NORM_WIDTH); for(i=0;i6;i++) { if(f[i][4]=0) for(j=0;j4;j++) { a1=f[i][j]; a2=f[i][(j+1)%4]; line(p[a1].x,p[a1].z,p[a2].x,p[a2].z); } } Cos(x) Tips 绕z轴转15度 新顶点位置计算 for(i=0;i8;i++) { t=cos(pi/12)*vv[i].x-sin(pi/12)*vv[i].y; v[i].x=(int)(t0? t+0.5:t-0.5); t=sin(pi/12)*vv[i].x+cos(pi/12)*vv[i].y; v[i].y=(int)(t0? t+0.5: t-0.5); v[i].z=vv[i].z; } 根据旧8点,计算新8个顶点位置 void rotate(Point vv[8], Point v[8]) { int i; float t; for(i=0;i8;i++) { t=cos(pi/12)*vv[i].x-sin(pi/12)*vv[i].y; v[i].x=(int)(t0? t+0.5:t-0.5); t=sin(pi/12)*vv[i].x+cos(pi/12)*vv[i].y; v[i].y=(int)(t0? t+0.5: t-0.5); v[i].z=vv[i].z; } } 新顶点位置计算 for (i=0;i6;i++) { for(j=0;j4;j++) { a1=f[i][j]; a2=f[i][(j+1)%4]; line(p[a1].x,p[a1].z,p[a2].x,p[a2].z); } } 新顶点位置计算 for (i=0;i6;i++) { for(j=0;j3;j++) { a1=f[i][j]; a2=f[i][(j+1)]; line(p[a1].x,p[a1].z,p[a2].x,p[a2].z); } a1=f[i][3]; a2=f[i][0]; line(p[a1].x,p[a1].z,p[a2].x,p[a2].z); } 将物体平移到屏幕中央 for(i=0;i8;i++) { p[i].x=p[i].x+250; p[i].z=p[i].z+250; } 旋转、更新 while(getch() !=
文档评论(0)