中科大-高级计算机图形学9-2
- 格式:pdf
- 大小:1.04 MB
- 文档页数:47
2011-2012年度第二学期 00106501计算机图形学童 伟 华 管理科研楼1205室E-mail: tongwh@ 中国科学技术大学 数学科学学院 /第五节 多边形网格模型2多边形网格模型 由多边形彼此相接构成的网格多边形称为网格的面,多边形的顶点也称为网格的顶点 z 一般要求两张相邻面的公共边完全相同,即不能出现某一面的一个顶点 在另一面的边中间z 图形学表示一大类实体模型的标准方法立方体 四面体 z 球面、立方体、锥面z3多边形网格的优势 容易表示z数据结构简单 容易变换 性质简单每个面只有一个法向量 z 容易确定内外侧z 容易绘制多边形填充 z 纹理映射z4OpenGL与多边形网格 还有许多其它的模型表示方法z曲面造型 多边形网格是OpenGL接受其它表示的中转站利用曲面造型,曲面需要被多边形网格逼近,OpenGL才能显示曲面 z 例如:球面z5多边形网格示例需要每个面显示成平 坦的效果,边应当显 示出来上下底应当平坦,侧 面显示不光滑利用一些显示算法可 以使侧面呈现光滑的 效果6多边形网格的类型 实体z多边形网格形成一个封闭的空间区域 不形成空间封闭区域,表示一个无限薄的曲面 表面z 两者都称为多边形网格(polygonal mesh),有时简 称为网格7网格的性质 给定一个由顶点、法向和面表组成的网格,那么它所 表示的对象是什么呢?下列是感兴趣的性质:实体:如果网格形成一个封闭的有界区域 z 连通性:如果任两个顶点间存在着由边构造的连续路径 z 简单性:表示一个实体,而且没有洞,即可以没有粘贴变形到球面 z 平面性: 如果所有面都是平面多边形 有些算法对平面多边形更有效 因此三角网格非常实用z8网格的性质(续) 凸性:网格表示凸体9性质的检测与应用 有些性质比较容易检测,即存在简单算法,而有些性 质则比较难以判断z例如判断网格是否表示实体不是一件简单的事情 用来表示对象的网格可以具有上述性质中的某几个或 全部关键在于用网格做什么 z 如果网格用来表示用某些材料构成的物理模型,那么就需要它至少是连 通和实体 z 处于艺术角度考虑,网格完全可以表示非物理的实体z10网格实例环体 具有所有的 性质 四面体 连通的实体, 但不是简单的 和凸的不可能的物体谷仓11非实体的网格表示开口盒子 瓶口 人脸12如何得到网格 存在实体的扫描z得到实体上的点,然后采用一定的算法形成网格 直接对网格进行造型是非常困难的 几何造型软件可以把曲面转化为近似的网格表示 任何表面都可以用多边形网格逼近到任意光滑精度, 这称为多边形网格的完备性13网格的表示 考虑网格v6 e1 v1 e2 e8 e7 e6 e11 e9 v8 v7 e12 v2 v5 e3 e10 v4 e4 v3 有8个节点和12边条ze55个内部多边形 z 6条内边(两个多边形共享的边) 每个顶点有一个位置vi = (xi, yi, zi),各顶点不必共面, 但对于简单网格,同一多边形的各顶点应当共面14简单表示 用每个多边形的各顶点的几何位置定义多边形 由此可有如下的OpenGL代码glBegin(GL_POLYGON); glVertex3f(x1,y1,z1); glVertex3f(x6,y6,z6); glVertex3f(x8,y8,z8); glVertex3f(x7,y7,z7); glEnd(); 无效且无结构z考虑移动一个顶点时会导致何种复杂操作15多边形的内外面 对于OpenGL而言,{v1,v6,v8,v7}顺 序的顶点与{v6,v8,v7,v1}顺序的顶 点定义等价的多边形,但是 {v7,v8,v6,v1}则定义不同的多边形 上述两种方式定义的多边形分别 称为多边形的内与外 利用右手法则判别 OpenGL可以把多边形的内外面 用完全不同的模式处理16几何与拓朴 一般来说,在数据结构中把几何与拓朴区分开是一个 非常好的想法几何:顶点的位置 z 拓朴:顶点和边的组织 z 例如:多边形就是顶点的有序列表,其中每条边以相邻的顶点为端点, 同时最后一个顶点与第一个顶点连接 z 即使几何信息改变了,拓朴信息可以保持不变z17顶点表 把几何位置放在一个数组中 用各顶点构造边时,利用指向各顶点的指针 引入多边形表x1, y1, z1 v1 v6 v8 v7 v6 v5 v8 拓朴 x2, y2, z2 x3, y3, z3 x4, y4, z4 x5, y5, z5 x6, y6, z6 x7, y7, z7 x8, y8, z8 几 何P1 P2 P3 P4 P518公共边 根据顶点列表可以正确地绘制多边形,但是如果只绘 制多边形的边,那么公共边就会被画两次 可以用边表存贮网格19边表e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12 v1 v6 x1, y1, z1 x2, y2, z2 x3, y3, z3 x4, y4, z4 x5, y5, z5 x6, y6, z6 x7, y7, z7 x8, y8, z8 注意:没有表示出来多边形v6 e1 v1e2 e8 e7 e6 e11 e9 v8v5e3 v4 e10 e4 v3v7 e12 v2e520立方体 为立方体旋转程序建立彩色立方体1 5 2 4 0 3 7 6定义顶点和颜色的全局数组GLdouble vertices[][3]= {{-1.0, -1.0, -1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0}, {-1.0,1.0,-1.0},{-1.0,-1.0,1.0}, {1.0,1.0,1.0},{1.0,1.0,1.0}, {-1.0,1.0,1.0}}; GLdouble colors[][3]={{0.0,0.0,0.0},{1.0,0.0,0.0}, {1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,0.0,1.0}, {1.0,1.0,1.0},{0.0,1.0,1.0}};21根据指标列表绘制多边形 根据在数组vertices中的一组指标绘制一个四边 形,颜色对应于第一个指标void polygon(int a, int b, int c, int d) { glBegin(GL_POLYGON); glColor3dv(colors[a]); glVertex3dv(vertices[a]); glVertex3dv(vertices[b]); glVertex3dv(vertices[c]); glVertex3dv(vertices[d]); glEnd(); }22利用表面绘制立方体void colorcube() { polygon(0,3,2,1); polygon(2,3,7,6); polygon(0,4,7,3); polygon(1,2,6,5); polygon(4,5,6,7); polygon(0,1,5,4); }5 1 4 0 3 2 7 6注意顶点的顺序保证表面的法向指向正确的方向,即立方体的外侧23效率 这种方法的缺陷在于为了在应用程序中建立模型,需 要进行很多次函数调用才能绘制立方体 通过表面绘制立方体,最直接的方式需要6个glBegin和6个glEnd z 6个glColor z 24个glVertex z 如果应用纹理和光照的话还会更多z24顶点数组 OpenGL提供了一种功能,称为顶点数组(vertex arrays),利用这种功能可以存贮数组数据 支持六种类型的数组z z z z z z顶点 RGB颜色 索引颜色 法向 纹理坐标 边标志 我们将只需要RGB颜色与顶点数组25初始化 为了利用颜色与顶点数据,首先激活相应功能glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); 标识数组的位置glVertexPointer(3, GL_DOUBLE, 0, vertices);三维 数组存贮为双 精度数数据是连 接存放的数据所在 的数组glColorPointer(3, GL_DOUBLE, 0, colors);26根据指标对应到面 构造表面指标的数组GLubyte cubeIndices[24]={0,3,2,1,2,3,7,6, 0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4}; 每四个相邻的指标描述立方体一个表面 利用glDrawElements取代在显示回调函数中所有的 glVertex和glColor进行绘制27绘制立方体 方法一for(i=0; i<6; i++) glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubeIndices[4*i]);指标数据 的开始绘制对 象类型指标的 数目指标数据 的格式 方法二glDrawElements(GL_QUADS,24, GL_UNSIGNED_BYTE, cubeIndices);只需要一次函数调用就绘制出来立方体!!!28顶点法向与面法向 在提供多边形网格的顶点及其相连信息的同时,应当 同时给出每个面的法向 在实际使用时,更有优势的方法是把法向与顶点关联 在一起,即点法向多边形的裁剪算法 z 明暗处理算法z OpenGL采用的是点法向29点法向与面法向30法向计算 顶点可以由用户输入,但是法向计算不是很直接z有时候法向可以来自于更数学的模型,例如曲面被网格逼近时,可以用 原来曲面的法向作为所需要的法向 如果需要把某一面显示为平坦的效果,那么只要得到 该面所在平面的法向就可以了 假设某面上连续三点为V1, V2, V3, 那么n = (V1 – V2) × (V3 – V2)就是所需要的法向z必要时进行单位化31简单方法的问题 如果所采用的两个向量几乎平行,会导致数值不稳定 结果 如果多边形不是完全共面,那么所采用的法向不具代 表性32Martin Newell方法 假设各顶点依次为(xi, yi, zi), i = 0, 1, …, N – 1. n = (nx, ny, nz)为所需要确定的法向,则n x = ∑ ( yi − ynext ( i ) )( zi + znext ( i ) )i =0 N −1 N −1 i =0n y = ∑ ( zi − znext ( i ) )( xi + xnext ( i ) ) nz = ∑ ( xi − xnext ( i ) )( yi + ynext ( i ) )i =0 N −133多面体 多面体是由简单表面(平面)构造的连通网格,其形 成一个有限体积的封闭实体多面体的每边都有两个面共享 z 每个顶点至少有三条边 z 两个面之间要么无交,要么只在公共边或顶点处相交z 四面体为多面体,环面为多面体当且仅当各面为平面34Euler公式 对于简单多面体: V + F – E =2顶点数:V, 面数: F, 边数: E z 例如,立方体:V=8, F=6, E=12z 如果多面体不是简单的,在面上有H个洞,通过多面 体的洞有G个,那么 V + F – E = 2 + H – 2G35Euler公式示例V = 16, F = 16, E = 32, H = 0, G=1V = 24, F = 15, E = 36, H = 3, G=136Schlegel示意图 视点位于多面体外,恰好在过某一面中心的法线上,这时形成 的中心投影就是多面体的Schlegel示意图37示例四面体谷仓谷仓视点在哪儿?38正多面体 如果多面体的所有面是全等的,而且每个都是正多边 形,那么称之为正多面体 可以证明只有五种正多面体,称为Plantonic体 由Planto (427—347BC)给出,但在此之前就发现 了十二面体玩具39正多面体40Thanks for your attention!41。
中科大科学岛计算机考数学二
1。
一般的,如果函数那么,。
这就是微积分基本定理,也叫牛顿--莱布尼兹公式。
也记作:=。
2.计算下列定积分:
=。
3、由上题可以发现,定积分的值可能取。
(l)当对应的曲边梯形位于x轴上方时如下图,定积分的值取,且等于。
(2)当对应的曲边梯形位于x轴下方时如下图,定积分的值取,且等于。
(3)当位于x轴上方的曲边梯形面积等于位于x轴下方的曲边梯形面积时如下图,定积分的值为,且等于
4、按万有引力定律,两质点间的吸引力,k为常数,
为两质点的质量,r为两点间距离,若两质点起始距离为a,质点m1沿直线移动至离m2的距离为b处,试求所作之功(b>a)。
5、曲线与直线所围成的图形(阴影部分)的面积等于。
6.=。
1、计算下列定积分:
(1)
解:解:
2。
计算下列定积分:
(1)(2)
(3)(4)
(5)(6)
(7)(8)
1.=()
A.5 B。
4 C。
3 D。
2
2.=()
A.B。
C。
D。
3.若,且a>1,则a的值为()
A.6 B。
4 C。
3 D。
2
4.已知自由落体运动的速率v=gt,则落体运动从t=0到t=t0所走的路程为()
A.B.C.D.
8.计算下列定积分的值
(1);
(2);
(3)。