- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL程序设计
9.3.2 绘制图元 1. 定义顶点 在OpenGL中,所有几何物体最终都由有一定顺序的顶点集来描述。 函数glVertex{234}{sifd}[v](TYPE coords)可以用二维、三维或齐次坐标定义顶点。 举例如下:glVertex2s(2,3); //表示一个空间顶点(2, 3, 0) //表示用双精度浮点数定义一个顶点glVertex3d(0.0,1.0,3.1414926535); //用齐次坐标定义一个顶点,其真实坐标为(1.2, 0.5, -1.1) glVertex4f(2.4,1.0,-2.2,2.0); GLfloat pp[3]={5.0,2.0,10.2};glVertex3fv(pp); //表示用一个指针(或数组)定义顶点。 2 构造几何图元 通常用一组相关的顶点序列以一定的方式组织起来定义某个几何图元,而不采用单独定义多个顶点来构造几何图元。 在OpenGL中,所有被定义的顶点必须放在glBegain()和glEnd()两个函数之间才能正确表达一个几何图元或物体,否则,glVertex*()不完成任何操作。 如: glBegin(GL_POLYGON); glVertex2f(0.0,0.0); glVertex2f(0.0,3.0); glVertex2f(3.0,3.0); glVertex2f(4.0,1.5); glVertex2f(3.0,0.0); glEnd(); 以上这段程序定义了一个多边形,如果将glBegin()中的参数GL_POLYGON改为GL_POINTS,则图形变为一组顶点。 点函数glBegin(GLenum mode) 描述一个几何图元的顶点列表的开始,其参数mode表示几何图元的描述类型。所有类型及说明见如下表所示。 类型 说明 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRIANGLES 多组独立填充三角形 GL_QUADS 多组独立填充四边形 GL_LINE_STRIP 不闭合折线 GL_LINE_LOOP 闭合折线 GL_TRAINGLE_STRIP 线型连续填充三角形串 GL_TRAINGLE_FAN 扇形连续填充三角形串 GL_QUAD_STRIP 连续填充四边形串 例9-3 几何图元构造(drawgeom.c) 9.4 OpenGL变换 9.4.1 从三维空间到二维平面9.4.2 几何变换9.4.3 投影变换9.4.4 裁剪变换9.4.5 视口变换9.4.6 矩阵堆栈 9.4.1 从三维空间到二维平面 1 相机模拟 在真实世界里,所有的物体都是三维的。但三维物体在计算机世界中却必须以二维平面物体的形式表现出来。 这类似于相机过程,如图所示。 实际上,从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 : 第一步,将相机置于三角架上,让它对准三维景物 (视点变换,Viewing Transformation) 第二步,将三维物体放在适当的位置 (模型变换,Modeling Transformation) 第三步,选择相机镜头并调焦,使三维物体投影在二维胶片上 (投影变换,Projection Transformation) 第四步,决定二维像片的大小 (视口变换,Viewport Transformation) 这样,一个三维空间里的物体就可以用相应的二维平面物体表示了。 2 OpenGL中的几种变换 1)视点变换 视点变换是在视点坐标系中进行的。视点坐标系遵循左手法则,世界坐标系遵循右手法则的。 当矩阵初始化glLoadIdentity()后,调用glTranslatef(x, y, z)作视点变换。函数参数(x, y, z)表示视点或相机在视点坐标系中移动的位置。 通常相机位置缺省值同场景中的物体一样,都在原点处,而且相机初始方向都指向Z负轴。 相机移走后,仍然对准立方体。如果相机需要指向另一方向,则调用glRotatef()可以改变。 2)模型变换 模型变换是在世界坐标系中进行的。 在这个坐标系中,可以对物体实施平移glTranslatef()、旋转glRotatef()和放大缩小glScalef()。 投影变换类似于选择相机的镜头。 例如:glF
文档评论(0)