计算机图形学课件讲义_第1页
计算机图形学课件讲义_第2页
计算机图形学课件讲义_第3页
计算机图形学课件讲义_第4页
计算机图形学课件讲义_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1计算机图形学2教材和参考书教材计算机图形学,倪明田等,北京大学出版社,2000年。参考书1、OpenGL编程指南(第四版),DaveShreiner等(邓郑祥译),人民邮电出版社,2005年。2、计算机图形学(第三版),DonaldHearn,电子工业出版社,2004年。3、计算机图形学基础,唐泽圣等,清华大学出版社,2001年。3本课程的学习内容1、图形软件包2、用VC++编写OpenGL程序3、图形变换4、颜色和光照5、混合、反走样和雾6、显示列表、位图和图像7、纹理映射8、复杂图形绘制9、杂例4一、图形软件包1、Direct3D和DirectXDirectX是微软公司的多媒体应用软件包,Direct3D是其中的一部分。DirectX支持图形、音响、应用程序安装和设备管理等。Direct3D至少支持游戏或其他应用中的12种3D图形效果处理。5一、图形软件包2、HeidiHeidi主要应用于CAD和CAM技术中,如AutoCAD、3DStudio以及3DSMAX。Heidi是专业性强的软件包,在CAD和CAM领域应用比较广泛,在其它领域如多媒体或游戏软件中应用较少。6一、图形软件包3、OpenGLOpenGL是以SGI公司为首,联合IBM、Intel等8家公司共同制定的3D图形标准。OpenGL与硬件无关、独立于操作系统、支持网络运行。7二、用VC++编写OpenGL程序1、OpenGL函数库基本库基本库是OpenGL的核心函数库。所有OpenGL操作都可用这些函数来实现。可以在平台之间移植。这些函数以“gl”为前缀。实用库实用库建立在基本库的基础之上,目的是为了减轻使用者的编程负担。这些函数以“glu”为前缀。辅助库提供窗口管理函数、事件处理函数和简单模型制作函数。这些函数以“aux”为前缀。Windows专用函数8二、用VC++编写OpenGL程序2、帧缓存在OpenGL中,帧缓存由颜色缓存、深度缓存、模板缓存和累积缓存组成。颜色缓存:用于存储每个像素点的颜色,包括左前、(左后、右前、右后)和辅助颜色缓存。深度缓存:用于存储每个像素点的深度值。模板缓存:用于将作图限制在屏幕中的某些部分。累积缓存:在RGBA模式中,用于将一系列图像累加成一幅图像。3、建立OpenGL控制台应用程序(.NET)9三、图形变换1、投影

voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdouble

zNear,GLdouble

zFar);函数功能:用一个正射投影矩阵右乘当前投影矩阵。输入参数:裁剪面left,right,bottom,top,zNear,zFar。输出参数:无返回值:无voidglOrtho2D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop);10三、图形变换正射投影nearfarviewdirectiontopbottomleftright11三、图形变换正射投影矩阵12三、图形变换

voidgluPerspective(GLdouble

fovy,GLdoubleaspect,GLdouble

zNear,GLdouble

zFar);函数功能:设置一个透视投影矩阵。输入参数:视域的角度fovy,视域宽与高的比率,视点到近和远裁剪面的距离zNear和zFar。输出参数:无返回值:无13三、图形变换voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdouble

zNear,GLdouble

zFar);函数功能:用一个透视投影矩阵右乘当前投影矩阵。输入参数:裁剪面left,right,bottom,top,到近和远裁剪面的距离zNear和zFar。输出参数:无返回值:无14三、图形变换透视投影(glFrustum)nearfarleftrightbottomtopviewpoint15三、图形变换透视投影(glFrustum)矩阵16三、图形变换2、视区变换

voidglViewport(GLintx,GLinty,GLintwidth,GLintheight);函数功能:在窗口中定义一个视区。输入参数:视区左下角坐标(x,y),视区的宽width,视区的高height。输出参数:无返回值:无17三、图形变换3、裁剪变换

voidglClipPlane(GLenumplane,constGLdouble*equation);函数功能:定义附加裁剪平面。输入参数:参数plane表示裁剪平面索引号GL_CLIP_PLANEi(i取0到到GL_MAX_CLIP_PLANES-1之间的整数),参数equation表示三维平面方程Ax+By+Cz+D=0的系数A,B,C和D构成的数组。输出参数:无返回值:无18三、图形变换4、几何变换

voidglRotate{f,d}(TYPEangle,TYPEx,TYPEy,TYPEz);函数功能:对局部坐标系进行旋转。输入参数:旋转角度angle,旋转轴方向矢量(x,y,z)。输出参数:无返回值:无19三、图形变换

voidglTranslate{f,d}(TYPEx,TYPEy,TYPEz);函数功能:对局部坐标系进行平移。输入参数:在坐标轴方向的平移量x,y和z。输出参数:无返回值:无voidglScale{f,d}(TYPEx,TYPEy,TYPEz);函数功能:对局部坐标系进行缩放。输入参数:在坐标轴方向的缩放量x,y和z。输出参数:无返回值:无20四、颜色和光照1、绘图颜色

voidglClearColor(GLclampedred,GLclampedgreen,GLclampedblue,GLclampedalpha);函数功能:设定清颜色缓冲区颜色值。voidglClear(GLbitfieldmask);函数功能:清除指定的缓冲区。21四、颜色和光照

voidglColor3{b,f,d,s,i,ub,ui,us}(TYPEred,TYPEgreen,TYPEblue);voidglColor4{b,f,d,s,i,ub,ui,us}(TYPEred,TYPEgreen,TYPEblue,TYPEalpha);voidglColor3{b,f,d,s,i,ub,ui,us}v(TYPE*v);voidglColor4{b,f,d,s,i,ub,ui,us}v(TYPE*v);函数功能:指定当前颜色。

voidglIndex{s,i,f,d}(TYPEc);voidglIndex{s,i,f,d}(TYPE*c);函数功能:设置当前颜色索引值。22四、颜色和光照2、阴影模式

voidglShadeMode(GLenummode);函数功能:设置阴影模式。输入参数:阴影模式类型mode。mode取值为GL_FLAT或GL_SMOOTH。当阴影模式为GL_FLAT时,多边形用一个顶点的颜色进行绘制;当阴影模式为GL_SMOOTH时,多边形用各个顶点颜色的插值结果进行绘制。输出参数:无返回值:无23四、颜色和光照3、材质

voidglMaterial{i,f}(GLenumface,Glenum

pName,TYPEparam);voidglMaterial{i,f}v(GLenumface,Glenum

pName,TYPE*param);函数功能:定义当前多边形的材质。输入参数:参数face表示材质应用于多边形的哪个面(GL_FRONT、GL_BACK或GL_FRONT_AND_BACK),参数pName表示光线类型(GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_SHINESS或GL_EMISSION)。参数param表示反射率或镜面反射指数。GL_SHINESS表示镜面反射指数,此时param允许取值范围为0到128。输出参数:无返回值:无24四、颜色和光照25四、颜色和光照

voidglColorMaterial(GLenumface,GLenummode);函数功能:定义当前多边形的材质。输入参数:参数face表示材质应用于多边形的哪个面(GL_FRONT、GL_BACK或GL_FRONT_AND_BACK),参数pName表示光线类型(GL_AMBIENT、GL_DIFFUSE、GL_AMBIENT_AND_DIFFUSE、GL_SPECULAR、GL_SHINESS或GL_EMISSION)。参数face缺省为GL_FRONT_AND_BACK,参数pName缺省为GL_AMBIENT_AND_DIFFUSE。输出参数:无返回值:无voidglColor*();26四、颜色和光照4、光照

voidglLight{i,f}(GLenumlight,Glenum

pName,TYPEparam);voidglLight{i,f}v(GLenumlight,Glenum

pName,TYPE*param);函数功能:创建光源。输入参数:参数light表示光源编号GL_LIGHTi(i取0到GL_MAX_LIGHTS-1之间的值),参数pName表示操作类型(GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_POSITION、GL_SPOT_DIRECTION、GL_SPOT_EXPONEXT、GL_SPOT_CUTOFF或GL_CONST_ATTENUATION)。参数param表示光的强度、光源位置、衰减因子或其他。输出参数:无返回值:无27四、颜色和光照28四、颜色和光照5、光照模型

voidglLightModel{i,f}(GLenum

pName,TYPEparam);voidglLightModel{i,f}v(GLenum

pName,TYPE*param);函数功能:建立光照模型。输入参数:参数pName表示光照模型的类型(GL_LIGHG_MODEL_AMBIENT、GL_LIGHT_MODEL_LOCAL_VIEWER或GL_MODEL_TWO_SIDE)。参数param表示要设置的参数值。参数pName取GL_LIGHG_MODEL_AMBIENT时,param表示全局环境光,参数pName取GL_LIGHG_MODEL_LOCAL_VIEWER时,param表示镜面反射光视角的计算方法。输出参数:无返回值:无29四、颜色和光照30四、颜色和光照31四、颜色和光照6、多边形绘制voidglFront(GLenummode);函数功能:指定多边形的正面。输入参数:指定多边形正面的参数mode。mode取GL_CCW或GL_CW。mode取GL_CCW时,多边形的顶点呈逆时针方向排列一面为正面。输出参数:无返回值:无32四、颜色和光照

voidglPolygonMode(GLenumface,GLenummode);函数功能:设定多边形的绘制模式。输入参数:指定绘制多边形哪些面的参数face,指定多边形绘制方式的参数mode。face的取值为GL_FRONT_AND_BACK、GL_FRONT或GL_BACK,缺省为GL_FRONT_AND_BACK,mode取GL_POINT、GL_LINE或GL_FILL,缺省为GL_FILL

。输出参数:无返回值:无33四、颜色和光照

voidglNormal3{b,s,i,f,d}(TYPEnx,TYPEny,TYPEnz);voidglNormal3{b,s,i,f,d}v(constTYPE*v);函数功能:设置当前法向量。输入参数:法向量分量或法向量矢量。法向量的方向影响镜面反射光和散射光的强度。输出参数:无返回值:无链接DrawScence()34四、颜色和光照35五、混合、反走样和雾1、混合

voidglBlendFunc(GLenum

sfactor,GLenum

dfactor);函数功能:设置混合因子。输入参数:参数sfactor和dfactor分别表示混合源因子和混合目标因子。输出参数:无返回值:无结果颜色值RsSr+RdDr,GsSg+GdDg,BsSb+BdDb,AsSa+AdDa其中Rs,Rd等表示源和目标颜色,Sr,Dr等表示混合因子。各分量的值被截取到[0,1].36五、混合、反走样和雾37五、混合、反走样和雾38五、混合、反走样和雾39五、混合、反走样和雾40五、混合、反走样和雾2、反走样

voidglHint(GLenumtarget,GLenummode);函数功能:设置混合因子。输入参数:参数target表示反走样的行为(GL_POINT_SMOOTH_HINT、GL_LINE_SMOOTH_HINT、GL_FOG_HINT、GL_POLYGON_SMOOTH_HINT),参数mode表示计算时的首选考虑(GL_FASTEST、GL_NICEST或GL_DON’T_CARE)。输出参数:无返回值:无41五、混合、反走样和雾3、雾化voidglFog{i,f}(GLenum

pName,TYPEparam);voidglFog{i,f}v(GLenum

pName,TYPE*param);函数功能:设置混合因子。输入参数:参数pName表示将要设置的参数类型(GL_FOG_MODE、GL_FOG_DENSITY、GL_FOG_START、GL_FOG_END、GL_FOG_COLOR、GL_FOG_INDEX),参数param表示参数值。当pName为GL_FOG_MODE时,param取值为GL_LINEAR、GL_EXP或GL_EXP2。输出参数:无返回值:无42五、混合、反走样和雾43五、混合、反走样和雾44六、显示列表、位图和图像1、显示列表显示列表为优化绘图性能而设计,尤其是为优化网络应用而设计。OpenGL的显示列表在程序运行过程中是不可修改的。显示列表的典型应用位图和图像:将位图或图像的定义添加到显示列表中,在显示列表编译(而不是在图形显示)时将数据转换成硬件支持的格式。光照、材质及光照模型:可将材质定义添加到显示列表中,避免在材质选择时反复计算。纹理:将纹理定义添加到显示列表中,在显示列表编译(而不是在图形显示)时将纹理格式转换成硬件支持的格式。矩阵操作:将计算某些矩阵及其逆矩阵的OpenGL命令添加到显示列表。45六、显示列表、位图和图像

voidglNewList(GLuintlist,GLenummode);函数功能:新建一个显示列表。输入参数:参数list表示显示列表的名称,参数mode表示显示列表的状态(GL_COMPILE、GL_COMPILE_AND_EXECUTE)。输出参数:无返回值:无voidglEndList();函数功能:显示列表定义结束。voidglCallList(GLuintlist);函数功能:调用显示列表。46六、显示列表、位图和图像

GLuint

glGenLists(GLsizeirange);函数功能:新建一组空显示列表。输入参数:参数range表示将要创建的显示列表的数目。输出参数:无返回值:成功时返回最前面一个显示列表的索引值,否则返回0。

GLboolean

glIsList(GLuintlist);函数功能:测试显示列表是否存在。输入参数:参数list表示被测试显示列表的名称。输出参数:无返回值:被测试的显示列表存在时返回GL_TRUE,否则返回GL_FALSE。47六、显示列表、位图和图像48六、显示列表、位图和图像49六、显示列表、位图和图像2、位图OpenGL提供了位图操作函数。利用这些函数可以实现字符(串)输出。

voidglRasterPos2{d,f,i,s}(TYPEx,TYPEy);voidglRasterPos3{d,f,i,s}(TYPEx,TYPEy,TYPEz);voidglRasterPos4{d,f,i,s}(TYPEx,TYPEy,TYPEz,TYPEw);voidglRasterPos{2,3,4}{d,f,i,s}v(TYPE*v);函数功能:指定像素操作的光栅位置。50六、显示列表、位图和图像

voidglBitmap(GLsizeiwidth,GLsizeiheight,GLfloatx,GLfloaty,GLfloat

dx,GLfloat

dy,constGLubyte*bitmap);函数功能:绘制位图。输入参数:参数width,height表示位图按像素表示的宽和高,参数x,y表示位图的左下角(相对于当前光栅位置的)坐标,参数dx,dy表示当前位图画完之后,当前光栅位置在水平和垂直方向的偏移量,参数bitmap表示位图的地址。输出参数:无返回值:无。51六、显示列表、位图和图像

glPixelStore{i,f}(GLenum

pName,TYPEparam);函数功能:设置像素存储模式。输入参数:参数pName表示存储模式名,参数param为特定存储模式设定的值。输出参数:无返回值:无。52六、显示列表、位图和图像53六、显示列表、位图和图像54六、显示列表、位图和图像55六、显示列表、位图和图像56六、显示列表、位图和图像57六、显示列表、位图和图像3、图像在位图中,每个像素点用一位来存储它的信息;在图像中,一个像素点可以用多位来存储它的信息。图像可以用作纹理图。58六、显示列表、位图和图像

voidglReadPixels(GLintx,GLinty,GLsizeiwidth,GLsizeiheight,GLenumformat,GLenumtype,GLvoid*pixels);函数功能:从帧缓存中读取像素块。输入参数:参数x,y表示像素块左下角的坐标,参数width,height表示像块的宽和高,参数format表示像素数据的格式(GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_LUMINANCE_ALPHA、GL_LUMINANCE、GL_DEPTH_COMPONENT、GL_STENCIL_INDEX、GL_COLOR_INDEX),参数type表示像素数据的数据类型(GL_UNSIGNED_BYTE、GL_BYTE、BL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT、GL_FLOAT),参数pixels指向像素数据。输出参数:无返回值:无。59六、显示列表、位图和图像

voidglDrawPixels(GLsizeiwidth,GLsizeiheight,GLenumformat,GLenumtype,GLvoid*pixels);函数功能:在当前光栅位置绘制像素块。输入参数:参数width,height表示像块的宽和高,参数format表示像素数据的格式(GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_LUMINANCE_ALPHA、GL_LUMINANCE、GL_DEPTH_COMPONENT、GL_STENCIL_INDEX、GL_COLOR_INDEX),参数type表示像素数据的数据类型(GL_UNSIGNED_BYTE、GL_BYTE、BL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT、GL_FLOAT),参数pixels指向像素数据。输出参数:无返回值:无。60六、显示列表、位图和图像voidglCopyPixels(GLintx,GLinty,GLsizeiwidth,GLsizeiheight,GLenumtype);函数功能:从帧缓存拷贝像素块到当前光栅位置。输入参数:参数x,y表示像素块左下角的窗口坐标,参数width,height表示像块的宽和高,参数type表示拷贝操作的类型(GL_COLOR、GL_STENCIL、GL_DEPTH)。输出参数:无返回值:无。61六、显示列表、位图和图像

voidglPixelZoom(GLfloat

xfactor,GLfloat

yfactor);函数功能:在x和y方向进行缩放。voidglPixelTransfer{i,f}(GLenum

pName,TYPEparam);函数功能:设置像素转换模式。输入参数:参数pName表示像素转换模式名,参数param表示pName要设定的值。输出参数:无返回值:无。62六、显示列表、位图和图像63六、显示列表、位图和图像64六、显示列表、位图和图像65六、显示列表、位图和图像

voidglPixelMap{ui,us,f}v(GLenummap,GLint

mapsize,constTYPE*values);函数功能:设置像素(转换)映射。输入参数:参数map表示像素映射表名称,参数mapsize表示映射表的大小,参数values表示mapsize个值对组成的数组。输出参数:无返回值:无66六、显示列表、位图和图像67六、显示列表、位图和图像68六、显示列表、位图和图像69六、显示列表、位图和图像70六、显示列表、位图和图像71六、显示列表、位图和图像72六、显示列表、位图和图像73六、显示列表、位图和图像74六、显示列表、位图和图像75六、显示列表、位图和图像76六、显示列表、位图和图像77六、显示列表、位图和图像78六、显示列表、位图和图像79六、显示列表、位图和图像80六、显示列表、位图和图像81七、纹理映射1、生成和绑定纹理名称

voidglGenTextures(GLsizein,GLuint*textures);函数功能:生成纹理名称。输入参数:参数n为纹理名称的数目,参数textures表示被生成的纹理名称构成的数组。输出参数:无返回值:无。82七、纹理映射83七、纹理映射2、纹理定义物体表面细节分为两类:一类是表面的颜色纹理,如桌上的木纹;另一类是表面的几何纹理,如凹凸不平的树皮。简单规则的颜色纹理可用表面细节多边形来模拟;当纹理变得精致复杂时,可采用纹理映射(texturemap)技术,即将一幅平面图映射到物体表面上,从而产生物体表面的细节。纹理是一块矩形区域,可以从图像中读取。可以将纹理映射到非矩形区域。84七、纹理映射纹理映射的基本步骤:纹理定义控制颜色启用纹理映射指定纹理坐标和几何坐标85七、纹理映射

voidglTexImage2D(GLenumtarget,GLintlevel,GLint

internalFormat,GLsizeiwidth,GLsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);函数功能:定义一个二维纹理图像。输入参数:参数target为纹理类型,只能是GL_TEXTURE_2D,参数level表示多分率图像的级数,参数internalFormat表示纹理中颜色分量的数目,参数width和height表示图像的宽和高,参数border表示图像边界的大小,参数format表示像素数据的格式,参数type表示像素数据的类型,参数pixels是指向像素数据的指针。输出参数:无返回值:无。86七、纹理映射voidglTexImage1D(GLenumtarget,GLintlevel,GLint

internalFormat,GLsizeiwidth,GLsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);函数功能:定义一个二维纹理图像。输入参数:参数target为纹理类型,只能是GL_TEXTURE_1D,参数level表示多分率图像的级数,参数internalFormat表示纹理中颜色分量的数目,参数width和height表示图像的宽和高,参数border表示图像边界的大小,参数format表示像素数据的格式,参数type表示像素数据的类型,参数pixels是指向像素数据的指针。输出参数:无返回值:无。87七、纹理映射88七、纹理映射MIP纹理映射程序员可以指定一系列分辩率递减的纹理图(mipmaps),OpenGL按照物体的尺寸自动确定应该使用哪个纹理图。使用MIP纹理映射技术时,纹理图的大小必须从n*n依次递减到1*1。89七、纹理映射3、设置纹理参数

voidglTexParameter{i,f}(GLenumtarget,GLenum

pName,TYPEparam);voidglTexParameter{i,f}v(GLenumtarget,GLenum

pName,TYPE*param);函数功能:设置纹理参数。输入参数:参数target为纹理类型(GL_TEXTURE_1D,GL_TEXTURE_2D)

,参数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论