资源描述:
《第6章OpenGL基本图元的绘制ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章OpenGL基本图元的绘制16.1概述“点动成线,线动成面,面动成体”几何实体由一系列有序的点和绘制图元的类型描述二维点、三维点对点、线、多边形的绘制,须通过一对函数(glBegin()和glEnd())完成:voidglBegin(Glenummode);voidglEnd(void);2注意:声明顶点的顺序非常重要;定点数目不正确时,有些图元将忽略多余的顶点glBegin的参数十分重要。3表6-1几何图元类型和说明Mode的值解释GL_POINTS一系列独立的点GL_LINES每两点相连成为线段GL_POLYGON简单凸多边形的边界GL_
2、TRIANGLES三点相连成为一个三角形GL_QUADS四点相连成为一个四边形GL_LINE_STRIP顶点相连成为一系列线段GL_LINE_LOOP顶点相连成为一系列线段,连接最后一点与第一点GL_TRIANGLE_STRIP线型连续填充三角形串GL_TRIANGLE_FAN扇形连续填充三角形串GL_QUAD_STRIP连续填充四边形串4OpenGL基本图元类型图示GL_POLYGONGL_POINTSGL_LINESGL_TRIANGLESGL_QUADS5OpenGL基本图元类型图示GL_QUAD_STRIPGL_TRIANGLE_STRIP
3、GL_TRIANGLE_FANGL_LINE_LOOPGL_LINE_STRIP67实例:绘制一个多边形边界在第二章的例子上修改而成代码如下(红色的部分是新加的代码):8#include"glut.h"#include#includevoidRenderScene(void){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(0.0,0.0);glVertex2f(0.0,1.0);glVertex2f(0.5,0.5);glVertex2f
4、(0.5,0);glVertex2f(0,0.0);glEnd();glFlush();}voidSetupRc(){glClearColor(0.0f,0.0f,1.0f,1.0f);}voidmain(){glutInitDisplayMode(GLUT_SINGLE
5、GLUT_RGB);glutCreateWindow("Simple");glutDisplayFunc(RenderScene);SetupRc();glutMainLoop();}9代码分析voidRenderScene(void){glClear(GL_COLOR_BUFF
6、ER_BIT);glBegin(GL_POLYGON);//设置模式glVertex2f(0.0,0.0);//第一个顶点glVertex2f(0.0,1.0);//...glVertex2f(0.5,0.5);//...glVertex2f(0.5,0);//...glVertex2f(0,0.0);glEnd();glFlush();}10116.2点一对函数:glBegin(GL_POINTS);…glEnd();点的绘制glVertex{2
7、3
8、4}{s
9、i
10、f
11、d}[v](TYPEcoords)12齐次坐标(HomogeneousCoor
12、dinate) 在空间直角坐标系中,任意一点可用一个三维坐标矩阵[xyz]表示。如果将该点用一个四维坐标的矩阵[HxHyHzH]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后一维坐标H称为比例因子。 在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一作为三维齐次点来处理。每个齐次点用一个向量(x,y,z,w)表示,其中四个元素全不为零。13齐次点具有下列几个性质如果实数a非零,则(x,y,z,w)和(ax,ay,az,aw)表示同一个点。三维空间点(x,y,z)的齐次点坐标为(x,y,z,1.0),二维平面点
13、(x,y)的齐次坐标为(x,y,0.0,1.0)。当w不为零时,齐次点坐标(x,y,z,w)即三维空间点坐标(x/w,y/w,z/w);当w为零时,齐次点(x,y,z,0.0)表示此点位于某方向的无穷远处。注意:OpenGL中指定w大于或等于0.0。14函数glVertex{2
14、3
15、4}{s
16、i
17、f
18、d}[v](TYPEcoords)可以用二维、三维或齐次坐标定义顶点。举例如下:glVertex2s(2,3);glVertex3d(0.0,1.0,3.1414926535);glVertex4f(2.4,1.0,-2.2,2.0);GLfloatp
19、p[3]={5.0,2.0,10.2};glVertex3fv(pp);第一例子表示一个空间顶点(2,3,0),第二个例子