实验五 纹理映射实验

实验五 纹理映射实验

ID:40724864

大小:20.77 KB

页数:8页

时间:2019-08-06

实验五 纹理映射实验_第1页
实验五 纹理映射实验_第2页
实验五 纹理映射实验_第3页
实验五 纹理映射实验_第4页
实验五 纹理映射实验_第5页
资源描述:

《实验五 纹理映射实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验五纹理映射实验实验项目性质:设计性实验所属课程名称:3D游戏图形学实验计划学时:3学时一、实验目的和要求掌握纹理映射的基本原理,利用VC++OpenGL实现纹理映射技术。二、实验原理纹理映射是真实感图形制作的一个重要部分,运用纹理映射可以方面地制作真实感图形,而不必花更多的时间去考虑物体的表面纹理。如一张木制桌子其表面的木纹是不规范的,看上去又是那么自然,如果在图形制作中不用纹理映射,那么只是这张桌面纹理的设计,就要花费很大精力,而且设计结果也未必能像现实中那么自然。如果运用纹理映射就非常方便,可以用扫描仪将这样的一张桌子扫成一个位图。然后的具体的操作中,只需把桌面形

2、状用多边形画出来,把桌面纹理贴上去就可以了。另外,纹理映射能够在多边形进行变换时仍保证纹理的图案与多边形保持一致性。例如,以透视投影方式观察墙面时,远端的砖会变小,而近处的砖就会大一些。此外,纹理映射也可以用于其他方面。例如,使用一大片植被的图像映射到一些连续的多边形上,以模拟地貌,或者以大理石、木纹等自然物质的图像作为纹理映射到相应的多边形上,作为物体的真实表面。在OpenGL中提供了一系列完整的纹理操作函数,用户可以用它们构造理想的物体表面,可以对光照物体进行处理,使其映射出所处环境的景象,可以用不同方式应用到曲面上,而且可以随几何物体的几何属性变换而变化,从而使制作

3、的三维场景和三维物体更真实更自然。在OpenGL中要实现纹理映射,需要经历创建纹理、指定纹理应用方式、启用纹理映射、使用纹理坐标和几何坐标绘制场景几个过程。用于指定一维、二维和三维纹理的函数分别为:VoidglTexImage1D(GLenumtarget,Glintlevel,Glintcomponents,GLsizeiwidth,Glintborder,GLenumformat,GLenumtype,constGLvoid*texels);VoidglTexImage2D(GLenumtarget,Glintlevel,Glintcomponents,GLsizei

4、width,GLsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*texels);VoidglTexImage3D(GLenumtarget,Glintlevel,Glintcomponents,GLsizeiwidth,GLsizeiheight,GLsizeidepth,Glintborder,GLenumformat,GLenumtype,constGLvoid*texels);其中,参数target取值一般为GL_TEXTURE_1D,GL_TEXTURE_2D和GL_TEXTURE_3D,分别

5、与一维、二维和三维的纹理相对应。参数Level表示纹理多分辨率层数,通常取值为0,表示只有一种分辨率。参数components的可能取值为1~4的整数以及多种符号常量(如GL_RGBA),表示纹理元素中存储的哪些分量(RGBA颜色、深度等)在纹理映射中被使用,1表示使用R颜色分量,2表示使用R和A颜色分量,3表示使用RGB颜色分量,4表示使用RGBA颜色分量。参数width,height,depth分别指定纹理的宽度、高度、深度。参数format和type表示给出的图像数据的数据格式和数据类型,这两个参数的取值都是符号常量(比如format指定为GL_RGBA,type指

6、定为GL_UNSIGNED_BYTE,参数texels指向内存中指定的纹理图像数据。在定义了纹理之后,需要启用纹理的函数:glEnable(GL_TEXTURE_1D);glEnable(GL_TEXTURE_2D);glEnable(GL_TEXTURE_3D);在启用纹理之后,需要建立物体表面上点与纹理空间的对应关系,即在绘制基本图元时,在glVertex函数调用之前调用glTexCoord函数,明确指定当前顶点所对应的纹理坐标,例如:glBegin(GL_TRIANGLES);glTexCoord2f(0.0,0.0);glVertex2f(0.0,0.0);glT

7、exCoord2f(1.0,1.0);glVertex2f(15.0,15.0);glTexCoord2f(1.0,0.0);glVertex2f(30.0,0.0);glEnd();其图元内部点的纹理坐标利用顶点处的纹理坐标采用线性插值的方法计算出来。在OpenGL中,纹理坐标的范围被指定在[0,1]之间,而在使用映射函数进行纹理坐标计算时,有可能得到不在[0,1]之间的坐标。此时OpenGL有两种处理方式,一种是截断,另一种是重复,它们被称为环绕模式。在截断模式(GL_CLAMP)中,将大于1.0的纹理坐标设置为1.0,将

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。