OpenGL中的纹理映射-纹理环境void glTexEnv{if}[v](GLenum target
OPENGL中文教程 OPENGL-5-纹理

4、绘制带纹理三棱锥NeHe SDK是把Nehe的教程中所介绍的所有功能,以面向对象的形式,提供给编程人员快速开发的一套编程接口。
在下面的教程中,我将按NeHe SDK源码的功能分类,一步一步把这套api介绍给大家。
如果你觉得有更好的学习方法,或者有其他有益的建议,请联系我。
zhouwei02@,zhouwei506@程序结构:我们在第三课程序的基础上添加一下功能:1.创建一个全局的纹理类2.利用纹理类载入纹理文件3.创建绘制带纹理坐标的三棱锥的函数4. 设置当前的纹理并启用它,绘制带纹理坐标的三棱锥 为了使用纹理类,我们需要包含下面的头文件(texture.h),并声明一个全局的视口变量text2D 。
我们在主程序文件和绘制文件中添加如下的代码:/*************************************新增的代码:包含纹理类的声明****************************/ #include "texture.h" // 包含纹理类的声明/**********************************新增的代码:包含纹理类的声明:结束**************************//*************************************新增的代码:创建Texture 类****************************/ Texture tex; // 使用全局变量Texture 类的实例 int texID; // 使用全局变量texID ,保存加载的纹理ID/**********************************新增的代码:创建Text2D 类:结束**************************/2、利用纹理类载入纹理文件我们在IniScene 函数中完成这个工作,首先调用纹理类的Load 函数载入base.bmp 图像文件,接着检查是否成功,如果不成功则弹出对话框,提示载入失败。
基于OpenGL的纹理映射技术

人工智能及识别技术本栏目责任编辑:李桂瑾电脑知识与技术1引言纹理映射技术产生上个世纪七十年代,是模拟自然景物表面细节的一种有效方法,在生成真实感图形中得到了大量的应用。
在过去的几十年中,人们一直通过建模的方法仿真客观世界,由于客观世界千变万化、错综复杂,要把客观世界的各种细微结构直接用几何模型表示出来,不仅模型难以建立,而且计算量庞大,难以满足实时显示的要求。
因此,在实际应用中,为了获得比较高的显示速度,往往以牺牲图形的真实感为代价。
尽管这样,显示一幅较复杂的图形往往需要好几个小时,并且能满足实时性要求的几何模型一直没有找到。
于是,人们就想象是否可以用“贴”墙纸的方法将反映物体表面细节的图案贴到物体表面上,从而开辟了一个新的研究领域———纹理映射(texturemapping)。
2OpenGL简述OpenGL是由SGI公司推出的独立于操作系统和硬件环境的开放式三维图形库,作为一种用于实时3D图形的工业标准API(ApplicationProgramminInterface)已经得到了广泛的认可和接受。
OpenGL提供了155个图形函数,开发人员可以利用这些函数来构造景物模型,开发三维图形实时交互软件。
OpenGL具有强大的图形功能和良好的跨平台移植能力,目前已被广泛应用于可视化技术、实体造型、CAD/CAM、模拟仿真等诸多领域。
纹理映射技术是OpenGL的一个重要的技术,在进行模型转换和投影转换都能执行操作,可用到所有的图元:点、线、多边形、位图和图像上。
3纹理的定义和分类我们可以从自然角度、运算角度及分析角度分别给出纹理的定义:从自然角度来看,纹理是在某一确定的图象区域中,以近乎周期的种类和方式重复其自身的局部基本模式元。
这一定义由Pratt给出,它适合应用于确定类型的线条模式。
基于运算角度,纹理是在某一运算表达式规定下,为近乎不变或者近乎周期性的数量表达。
此定义由Sklansky给出,它适合于根据数学的分析方法抽取纹理特征以实现纹理区域分类的应用领域。
高级计算机图形学OpenGL纹理映射

GLboolean glIsTexture(GLuint textureName);
• •
void glBindTexture(GLenum target, GLuint textureName); void glDeleteTextures(GLsizei n, const GLuint *textureNames);
• GLubyte • •
my_texels[512][512][3];
定义纹理图像所用的像素图
扫描图像 由应用程序代码创建
激活纹理映射
• glEnable(GL_TEXTURE_2D); • OpenGL支持一至四维纹理映射
9
把图像定义为纹理
void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
本节只讨论从二维纹理到曲面的映射
4
基本策略
应用纹理需要下面三个步骤
•
•
•
• • •
• •
指定纹理
读入或生成图像 赋给纹理 激活纹理映射功能
由应用程序建立适当的映射函数 环绕(wrapping), 滤波(filtering)
5
给每个顶点赋纹理坐标 指定纹理参数
纹理映射
几何体
屏幕
图像
6
纹理示例
mipmapped 的线性滤波
23
opengl基础6

纹理一般定义在单位正方形域0s1,0t1上,称为纹理
空间
t
1
0
0
1
s
1.1 纹理映射
纹理模式
纹理函数 定义在纹理空间中的函数。例如: b [ s 8 ] [ t 8 ]为 奇 数 g (s, t) a [ s 8 ] [ t 8 ]为 偶 数
第七章
纹理映射
Introduction of Computer Graphics
前 言
上讲内容
简单光照模型
光源 环境光 漫反射 镜面反射 光强衰减 颜色 透明度 阴影
前 言
上讲内容
面的明暗处理
平面明暗处理 Gouraud明暗处理 Phong明暗处理 光线跟踪算法 辐射度光照模型 BRDF光照模型
s 2u / ,
Y X
将投影像素区映射到纹理空间
对每个投影像素区所覆盖的纹理图案中的
光强值取平均,得到像素的光强度
1.2 环境映射
Environment Mapping,将空间光照模型作为纹理映射到物体 表面 首先定义一个描述单个或一组物体周围环境的光强度数组 (即环境纹理,包括光源强度、天空和其他背景物体),将 环境纹理映射到一个封闭环境中表面; 然后根据观察方向将环境空间表面的环境纹理映射至物体表 面,实现全局镜面反射和漫反射效果; 环境映射的封闭空间可以是球体,更经常使用立方体或圆柱 体形状的封闭空间。
纹理空间: (s,t) 数组坐标
-1 MTMT
对象空间: (u,v) 表面参数
基于OpenGL纹理映射技术的纸盒贴图功能的实现方法

收稿日期:2006Ο06Ο16作者简介:赵荣丽(1979-),女,广东工业大学助教,主要从事包装结构、包装C AD 、包装印刷等的教学和科研。
基于OpenG L 纹理映射技术的纸盒贴图功能的实现方法赵荣丽1,谢利2,和克智2,白莉1(1.广东工业大学,广州510006;2.西安理工大学,西安710048)摘要:根据纸盒结构的面片特性,利用OpenG L 的纹理映射技术,提取纸盒的装潢图片,建立其与纸盒结构的对应关系,实现纸盒CAD 系统中的贴图功能以及三维效果图的展示。
关键词:纹理映射;纸盒;三维效果图中图分类号:T B482.1;TP391.72 文献标识码:A 文章编号:1001-3563(2006)05-0061-03Cart on Mapp ing Technique Based on OpenG L’s Texture Mapp ingZHAO R ong 2li 1,X IE L i 2,HE Ke 2zhi 2,BA I L i1(1.Guangdong University of technol ogy,Guangzhou 510006,China;2.Xi’a n University of technol ogy,Xi’an 710048,China )Abstract:According t o the characteristic of cart on,OpenG L ’s texture mapp ing was used t o distill the up 2holstering p icture,and the corres ponding connecti on bet w een the upholstering p icture and the cart on structure was set up.The cart on mapp ing functi on of cart on CAD and the expositi on of cart on 3D effect graph was real 2ized by this technol ogy .Key words:texture mapp ing;cart on;3D effect graph 纹理映射技术是为了简化模拟真实世界的过程而诞生的一项技术,即采用物体的真实纹理图形映射到绘制的三维图形表面,使其呈现出更加逼真的效果。
《opengl计算机三维图形程序设计》纹理.pptx

2013.11.19
纹理映射
纹理(texture)通常指物体的表面细节
2
纹理映射
纹理映射技术给出了定义表面上任意点属性的 一种方式
漫反射率 镜面反射率 透明度 折射率 …
I d Kd I e cos
3
纹理映射
两类最常使用的纹理
颜色纹理
几何纹理
4
颜色纹理
确定表面上颜色纹理的两种方法
预先建立表面的纹理模型 纹理映射:建立表面上的每一点和一已知图像上的 点的对应关系,取图像上相应点的颜色值作为表面 上各点的颜色值
方法
物体表面S由参数方程S=S(u,v) 表示
S上的任意一点(u,v)的法向n=Su×Sv
沿着表面S的法线方向叠加一个微小的扰动量P(u,v)
定义了一张新的表面S’
S' S(u, v) P(u, v)
n
n
11
凹凸映射
方法(cont.)
新表面的法向可用 n’=Su’×Sv’ 计算
n' n Pu (n Sv ) Pv (S u n)
映射阶段(cont.)
27
Mipmap效果
无Mipmap
有Mipmap
28
纹理反走样效果对比
未进行反走样处理
Mipmap
超采样
超采样+Mipmap
29
纹理映射实例程序
利用OpenGL实现纹理映射的三个主要步骤
生成纹理数据 将纹理数据载入纹理内存 将纹理数据映射到物体表面
30
纹理映射实例程序
讲解光盘中所附的程序
n
n
在计算表n,生成物体表面的凹凸效果
扰动函数P(u,v)既可解析定义,也可通过二维图像 定义
opengl纹理映射(下)

齐次坐标
齐次坐标(homogeneous coordinates)
是对普通坐标的扩展 二维平面点(x,y)的齐次坐标表示为(x, y,w)
(x,y,w)→(x/w,y/w)
三维空间点(x,y,z)的齐次坐标表示为 (x,y,z,w)
(x,y,z,w)→(x/w,y/w,z/w)
齐次坐标
两个重要性质
驻留纹理
驻留策略
为纹理对象指定驻留优先级
void glPrioritizeTextures(GLsizei n, const GLuint *textureNames, const GLclampf *priorities) 优先级范围在[0.0,1.0]之间,0最低,1最高
为当前绑定纹理指定优先级
GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR
mipmap下的过滤处理
GL_NEAREST_MIPMAP_NEAREST
寻找最合适的一层mipmap,再应用GL_NEAREST规则寻找合适 的纹元
OpenGL三维图形编程
纹理映射(下)
纹理高级技术
一维纹理 纹理代理 驻留纹理 自动纹理坐标 环境映射 纹理矩阵 齐次坐标 细节多层次(mipmap)
一维纹理
与二维纹理相关函数类似,target参数使用 GL_TEXTURE_1D
从内存纹理数据定义纹理 从帧缓存数据创建纹理 使用内存数据替换纹理图像 使用帧缓存数据替换纹理图像 ……
查询多个纹理的驻留情况
GLboolean glAreTexturesResident(GLsizei n, const GLuint*textureNames, GLboolean *residences) 纹理全部驻留,返回GL_TRUE,residences不变 纹理部分驻留,返回GL_FALSE,residences相应改变
opengl算法学习---纹理映射

opengl算法学习---纹理映射纹理映射纹理映射(Texture Mapping),⼜称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。
简单来说,就是把⼀幅图像贴到三维物体的表⾯上来增强真实感,可以和光照计算、图像混合等技术结合起来形成许多⾮常漂亮的效果。
纹理纹理可看成是⼀个或多个变量的函数,因此根据纹理定义域的不同,纹理可分为⼀维纹理、⼆维纹理、三维纹理和⾼维纹理。
基于纹理的表现形式,纹理⼜可分为颜⾊纹理、⼏何纹理两⼤类。
颜⾊纹理指的是呈现在物体表⾯上的各种花纹、图案和⽂字等,即通过颜⾊⾊彩或明暗度的变化体现出来的细节。
如⼤理⽯墙⾯、墙上贴的字画器⽫上的图案等。
⼏何纹理(也可称为凹凸纹理)是指基于景物表⾯微观⼏何形状的表⾯纹理,如桔⼦、树⼲、岩⽯、⼭脉等表⾯呈现的凸凹不平的纹理细节。
⽣成颜⾊纹理的⼀般⽅法是在⼀个平⾯区域(即纹理空间)上预先定义纹理图案,然后建⽴物体表⾯的点与纹理空间的点之间的对应—即映射。
以纹理空间的对应点的值乘以亮度值,就可把纹理图案附到物体表⾯上⽤类似的⽅法给物体表⾯产⽣凹凸不平的外观或称凹凸纹理。
普通纹理映射常见的2D纹理映射实际上是从纹理平⾯到三维物体表⾯的⼀个映射。
凹凸纹理映射前述各种纹理映射技术只能在光滑表⾯上描述各种事先定义的花纹图案,但不能表现由于表⾯的微观⼏何形状凹凸不平⽽呈现出来的粗糙质感,如布纹,植物和⽔果的表⽪等1978年Blinn提出了⼀种⽆需修改表⾯⼏何模型,即能模拟表⾯凹凸不平效果的有效⽅法⼀⼏何(凹凸)纹理映射(bump mapping)技术⼀个好的扰动⽅法应使得扰动后的法向量与表⾯的⼏何变换⽆关,不论表⾯如何运动或观察者从哪⼀⽅向观察表⾯,扰动后的表⾯法向量保持不变。
Blinn表⾯法⽮扰动法在表⾯任⼀点处沿其法向附加⼀微⼩增量,从⽽⽣成⼀张新的表⾯,计算新⽣成表⾯的法⽮量以取代原表⾯上相应点的法⽮量。
透明效果与混合光学原理:透射,折射,反射颜⾊调和法设a为透明体的不透明度,0≤a≤1,则I=αI a+(1−α)I ba=1,完全不透明a=0,完全透明alpha融合技术BlendingRGBA(a)不透明度a表⽰穿透该表⾯光线的数量a=1,完全不透明;a=0,完全透明gl.blendFunc(src_ factor,dst factor)混合后颜⾊=源颜⾊src_factor+⽬标颜⾊dst_factor源颜⾊:当前对象⽬标颜⾊:帧缓存像素透明与Z-Buffer消隐当对象A是透明的,即B透过A是部分可见时先画B再画A,可以处理先画A再画B,深度缓冲会从B取⼀个像素,同时注意到⼰经绘制了⼀个更近的像素(A),然后它的选择是不绘制BZ-Buffer消隐不能很好处理透明的物体,需要修正才⾏开启深度测试gl.enable(gl.DEPTH_TEST);绘制所有不透明物体(a=1.0)锁定深度缓冲区gl.depthMask(false);按从后向前次序绘制所有半透明物体释放深度缓冲区gl.depthMask(true);光线跟踪光线跟踪算法[WH1T80]是⽣成⾼度真实感图形的主要算法之⼀。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GL_TEXTURE_2D
18
OpenGL中的纹理映射-纹理启用与关闭
glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
19
void setTexture2(void) { FILE* fd; GLubyte ch; int i,j,k; fd=fopen("../HongKong.256.256.raw","r"); for (i=0;i<TEX_WIDTH;i++) { for (j=0; j<TEX_HEIGHT;j++) { for (k=0;k<3;k++) { fread(&ch,1,1,fd); texImage[i][j][k]=(GLubyte)ch; } } } fclose(fd); }
进行纹理映射
建立纹理与三维物体之间的对应关系 扰动法向量
6
纹理空间
纹理定义在单位正方形区域 (0 u 1, 0 v 1) 之上,称为纹理空间
纹理函数是定义在此空间上的函数 纹理空间也可用其他方法定义
用参数曲面的参数域作为纹理空间 2D 用辅助平面、圆柱、球定义纹理空间 2D 用三维直角坐标作为纹理空间 3D
15
OpenGL中的纹理映射-纹理环境
void glTexEnv{if}[v](GLenum target,GLenum pname,TYPE param); 可以用纹理中的值Ct来调整多边形(曲面) 原来的颜色Cf,或用纹理图像中的颜色与多 边形(曲面)原来的颜色进行混合。
GL_DECAL Ct GL_MODULATE Ct Cf GL_BLEND Cf (1-Ct)
13
OpenGL中的纹理映射-纹理定义
void glTexImage2D (GLenum target,GL_TEXTURE_2D GLint level,只有一种分辨率,则level设为0 GLint components, 3表示选择了R、G、B三个分量 GLsizei width,纹理图像的长度宽度 glsizei height, GLint border,纹理图像的边界宽度,通常为0 GLenum format,纹理映射的格式和数据类型 GLenum type,纹理映射的数据类型 const GLvoid *pixels);纹理图像数据
12
OpenGL中的纹理映射figure8.3.c
基本步骤如下:
定义纹理;glTexImage2D 控制纹理; glTexParameter{if}[v] 纹理环境;void glTexEnv{if}[v] 绘制场景,给出顶点的纹理坐标和几何坐标。
纹理映射只能用于RGBA颜色模式。
二维纹理域,三维图形场景物体,二维纹理 映射是一种非线性映射
纹理变形 不能保证纹理连续性
纹理空间定义在三维空间上,与物体空间是 同维的,通过物体空间坐标(x,y,z)来计算 纹理坐标(u,v,w) 把场景中的物体变换到纹理空间的局部坐标 系中去
11
几何纹理
几何纹理方法-对物体表面几何性质作微小 扰动,产生凹凸不平的细节效果,给物体表 面图象加上一个粗糙的外观
颜色纹理
一维纹理,
二维纹理,物体表面花纹、图案 三维纹理,
几何纹理,基于物体表面的微观几何形状
法向扰动
5
纹理映射
纹理映射是把纹理图象值映射到三维物体的表面的技术,以 便于使用简单的几何图产生丰富逼真的视觉效果图像 纹理映射的问题
纹理定义方法:
图象纹理:将二维纹理图案映射到三维物体表面,绘制物体 表面上一点时,采用相应的纹理图案中相应点的颜色值。 函数纹理:用数学函数定义简单的二维纹理图案,如方格地 毯。或用数学函数定义随机高度场,生成表面粗糙纹理即几 何纹理
14
OpenGL中的纹理映射-纹理控制
void glTexParameter{if}[v] (GLenum target,GLenum pname, TYPE param); ______________________________________________ 参 数 值 ______________________________________________ GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_CLAMP 大于1的纹素值都置为1,小于0的置为0 GL_REPEAT 重复映射
7
二维纹理映射
二维纹理映射技术:贴墙纸
三个空间
纹理空间:二维图像 景物空间:物体 图像空间:屏幕
两个映射关系
纹理空间与景物空间的映射? 景物空间与图像空间的映射:一旦确定相机参数, 即可由取景变换及其逆变换确定
8
二维纹理映射示意图
9
参数映射
10
三维纹理域的映射
GL_TEXTURE_MAG_FILTER 放大滤波方法 GL_TEXTURE_MIN_FILTER 缩小滤波方法 GL_NEAREST 最靠近象素中心的纹素 GL_LINEAR 最靠近象素中心的四个象素的加权平均值 ______________________________________________
第8章 纹理映射
解决计算机生成真实感图象缺乏现实物体表 面细节的问题
1
纹理例子
2
纹理的概述
用简单光照明模型生成真实感图象,由于表 面过于光滑单调,反而显得不真实 现实物体表面有各种表面细节-纹理
木材表面的木纹 建筑物墙壁上的装饰图案 桔子皮表面的皱纹
3示例4源自理 纹理是物体表面的细小结构 纹理类型
16
OpenGL中的纹理映射-纹理坐标
坐标定义
void glTexCoord{1234}{sifd}[v] (TYPE coords);
17
OpenGL中的纹理映射-多个纹理
void glGenTextures( GLsizei n, GLuint *textures ); void glBindTexture( GLenum target, GLuint texture );