第三章 基本图形的绘制PPT讲稿.ppt
第三章基本图形的绘制第1页,共36页,编辑于2022年,星期二实例02绘制基本图形第2页,共36页,编辑于2022年,星期二坐标用户(opengl)坐标第3页,共36页,编辑于2022年,星期二填充模式glPolygonMode(GL_FRONT,GL_FILL);/设置正面为填充方式glPolygonMode(GL_BACK,GL_LINE);/设置反面为边缘绘制方式glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);/设置两面均为顶点绘制方式glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);/设置两面均为顶点绘制方式glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);/设置两面均为顶点绘制方式第4页,共36页,编辑于2022年,星期二glFrontFace(GL_CCW);/设置CCW方向为“正面”,CCW即CounterClockWise,逆时针glFrontFace(GL_CW);/设置CW方向为“正面”,CW即ClockWise,顺时针第5页,共36页,编辑于2022年,星期二如何绘图glBegin(GL_LINES);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();基本图形类型组织基本图形的顶点第6页,共36页,编辑于2022年,星期二顶点的其它组成方式glBegin(primType);for(i=0;i n;+i)glColor3f(redi,greeni,bluei);glVertex3fv(coordsi);glEnd();第7页,共36页,编辑于2022年,星期二第8页,共36页,编辑于2022年,星期二Geometric PrimitivesGL_POINTS单个顶点集GL_LINES多组双顶点线段GL_POLYGON单个简单填充凸多边形GL_TRIANGLES多组独立填充三角形GL_QUADS多组独立填充四边形GL_LINE_STRIP不闭合折线GL_LINE_LOOP闭合折线GL_TRIANGLE_STRIP线型连续填充三角形串GL_TRIANGLE_FAN扇形连续填充三角形串GL_QUAD_STRIP连续填充四边形串第9页,共36页,编辑于2022年,星期二基本图例第10页,共36页,编辑于2022年,星期二Howtobuildstripshape?GL_TRIANGLE_FANVertices1,n+1,andn+2definetrianglen.GL_TRIANGLE_STRIPForoddnforn,n+1,andn+2definetrianglen.Forevennforn+1,n,andn+2definetrianglen.第11页,共36页,编辑于2022年,星期二Howtobuildstripshape?(Cont.)GL_QUAD_STRIPVertices2n-1,2n,2n+2,and2n+1definequadriliteraln.N/2-1quadriliteralsaredrawn.第12页,共36页,编辑于2022年,星期二Shapes sample第13页,共36页,编辑于2022年,星期二练习01圆柱的绘制思路第14页,共36页,编辑于2022年,星期二练习02绘制连续多边形思路第15页,共36页,编辑于2022年,星期二练习03小房子的绘制思路线框模式实体模式点模式深度测试第16页,共36页,编辑于2022年,星期二构建复杂图形顶点数组第17页,共36页,编辑于2022年,星期二Vertexarrayvoid glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid*pointer);pointertype GL_SHORT,GL_INT,GL_FLOAT,GL_DOUBLEsize 2,3,or 4.stride offset between consecutive vertexes.第18页,共36页,编辑于2022年,星期二void glIndexPointer(GLenum type,GLsizei stride,const GLvoid*pointer);void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid*pointer);void glNormalPointer(GLenum type,GLsizei stride,const GLvoid*pointer);第19页,共36页,编辑于2022年,星期二void glEnableClientState(GLenum array)GL_VERTEX_ARRAY,GL_COLOR_ARRAY,GL_INDEX_ARRAY,GL_NORMAL_ARRAY,GL_TEXTURE_COORD_ARRAY,GL_EDGE_FLAG_ARRAY第20页,共36页,编辑于2022年,星期二void glArrayElement(GLint ith)void glDrawElements(GLenum mode,GLsizei count,GLenum type,void*indices);inti;glBegin(mode);for(i=0;icount;i+)glArrayElement(indicesi);glEnd();第21页,共36页,编辑于2022年,星期二glArrayElementglEnableClientState(GL_COLOR_ARRAY);glEnableClientState(GL_VERTEX_ARRAY);glColorPointer(3,GL_FLOAT,0,colors);glVertexPointer(2,GL_INT,0,vertices);glBegin(GL_TRIANGLES);glArrayElement(2);glArrayElement(3);glArrayElement(5);glEnd();第22页,共36页,编辑于2022年,星期二EqualcodeglBegin(GL_TRIANGLES);glColor3fv(colors+(2*3*sizeof(GLfloat);glVertex3fv(vertices+(2*2*sizeof(GLint);glColor3fv(colors+(3*3*sizeof(GLfloat);glVertex3fv(vertices+(3*2*sizeof(GLint);glColor3fv(colors+(5*3*sizeof(GLfloat);glVertex3fv(vertices+(5*2*sizeof(GLint);glEnd();第23页,共36页,编辑于2022年,星期二staticGLubytefrontIndices=4,5,6,7;staticGLubyterightIndices=1,2,6,5;staticGLubytebottomIndices=0,1,5,4;staticGLubytebackIndices=0,3,2,1;staticGLubyteleftIndices=0,4,7,3;staticGLubytetopIndices=2,3,7,6;glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,frontIndices);glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,rightIndices);glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,bottomIndices);glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,backIndices);glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,leftIndices);glDrawElements(GL_QUADS,4,GL_UNSIGNED_BYTE,topIndices);第24页,共36页,编辑于2022年,星期二staticGLubyteallIndices=4,5,6,7,1,2,6,5,0,1,5,4,0,3,2,1,0,4,7,3,2,3,7,6;glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,allIndices);第25页,共36页,编辑于2022年,星期二Set ColorTheOpenGLColorModelOpenGLusestheRGB(A)colormodelThereisalsoacolor-indexmodeColorsarespecifiedasfloating-pointnumbersintherange0.0,1.0setawindowsbackgroundcolor,shouldcall glClearColor(1.0,0.3,0.6,1.0);R G B A-Tosetacolor,shouldcall glColor3f(1.0,0.3,0.6);第26页,共36页,编辑于2022年,星期二ColormodelOpenGL使用RGB(A)颜色模型voidglColor3bsifdubusui(TYPEr,TYPEg,TYPEb);voidglColor4bsifdubusui(TYPEr,TYPEg,TYPEb,TYPEa);voidglColor3bsifdubusuiv(TYPE*v);voidglColor4bsifdubusuiv(TYPE*v);颜色索引模式voidglIndexsifd(TYPEc);voidglIndexsifdv(TYPE*c);第27页,共36页,编辑于2022年,星期二OpenGLColorSpecifyingSchemeset_current_color(red);draw_object(A);draw_object(B);set_current_color(green);set_current_color(blue);draw_object(C);Color buffer Color buffer?第28页,共36页,编辑于2022年,星期二Clearing the WindowglClearColor(0.0,0.0,0.0,0.0);glClearDepth(1.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);第29页,共36页,编辑于2022年,星期二Displaying Points,LinesPoint Detailsvoid glPointSize(GLfloat size);Line Detailsvoid glLineWidth(GLfloat width);The line width can be got by calling:glGetFloatv(GL_LINE_WIDTH_RANGE);Stippled LinesglLineStipple(1,0 x3F07);void glLineStipple(GLint factor,GLushort pattern);0011111100000111Redbook:lines.c第30页,共36页,编辑于2022年,星期二Stippling Polygonsvoid glPolygonStipple(const GLubyte*mask);状态开关glEnable(GL_POLYGON_STIPPLE);glDisable(GL_POLYGON_STIPPLE);glEnable(GL_LINE_STIPPLE);glDisable(GL_LINE_STIPPLE);第31页,共36页,编辑于2022年,星期二Polys.c第32页,共36页,编辑于2022年,星期二深度测试显示模式支持深度缓冲glEnable(GL_DEPTH_TEST)参见实例“深度测试”第33页,共36页,编辑于2022年,星期二调研与讨论1.列举比较常用光栅扫描算法2.列举比较常用填充算法3.列举比较常用消隐算法4.列举比较常用反走样技术5.列举比较常用裁剪算法分组讨论第34页,共36页,编辑于2022年,星期二实验01绘制基本图形提交格式:把实验报告(word文档)和工程文件打包,并以学号姓名(如:20080001郭德刚)的形式命名。提交位置:ftp:/202.113.72.6/学生作业/汪日伟/作业及实验报告/2008-2009第二学期图形学/第一次实验提交时间:2009-3-16前第35页,共36页,编辑于2022年,星期二实验02多边形的填充多边形的填充提交格式:把实验报告(word文档)和工程文件打包,并以学号姓名(如:20080001郭德刚)的形式命名。提交位置:ftp:/202.113.72.6/学生作业/汪日伟/作业及实验报告/2008-2009第二学期图形学/第一次实验提交时间:2009-3-23前第36页,共36页,编辑于2022年,星期二