纹理的应用

1.纹理坐标

纹理坐标的范围是0到1的浮点数所组成的三维空间坐标系,每个坐标点对应四个分量,分别为s,t,r,q。其中s,t,r为存储在内存中或者颜色缓冲区的纹理单元的位置,通过指定的纹理坐标可以对相应的纹理单元进行取样,进而完成贴图。q分量相当于OpenGL中顶点坐标的w值,相当于缩放因子,对一些阴影效果或者高级纹理贴图会应用到,默认值为1。

2.纹理参数

在通过纹理坐标得到纹理单元的样本后,为我们要完成的贴图准备了基本的素材,但在贴图工作之前我们还要做一些准备工作,为此我们要指定贴图的方式和贴图的行为,这是通过一些纹理参数去指定的。
比如说当我们通过纹理坐标取到对应的纹理纹理单元样本后,将纹理坐标应用到对应的顶点坐标完成贴图,我们会发现贴上去的纹理图片会发生拉伸或者压缩的现象,这是因为纹理单元是很难与像素一一对应的,这时候就需要进行对纹理进行过滤,其实过滤可以认为是通过对压缩或者收缩的纹理贴图计算颜色片段的过程

1.基本过滤

基本过滤分为最邻近过滤和线性过滤两种
-最邻近过滤
其中最邻近过滤可以理解为纹理坐标位于哪个纹理单元,哪个为单元就作为这个颜色片段的颜色值,这样简单粗暴的解决纹理单元与像素不能一一的对应的关系,但是这样做有一个确定,就是这种一一对应有可能是不匹配的一一对应,这样就可能导致贴图贴图后出现像素斑驳的现象。
-线性过滤
线性过滤可以解决最邻近过滤可能出现斑驳的现象,线性过滤相对于最邻近过滤做了额外的操作,线性过滤是将纹理坐标位于的那个纹理单元的周围纹理单元进行加权平均计算后应用到这个纹理坐标,而为了使得到的这个插值片段与纹理片段更匹配,我们需要将纹理坐标准确的落在相应的纹理单元中间。这样也需要额外的一些计算。
这两种基本过滤都可以通过设置纹理参数相关函数实现

2.纹理环绕

在通过纹理过滤后我们通过纹理坐标得到相对准确的颜色片段,这时候我们还应该指定这段颜色片段才用哪种形式进行排布,这时候就需要设置纹理环绕方式了。
纹理坐标的范围是0.0到1.0之间,纹理坐标的值会与纹理单元之间形成映射关系,但是当纹理坐标落在纹理单元之外时,这时候OpenGL就会才用环绕模式处理这类问题,我们可以指定沿着哪个坐标轴进行环绕,也可以指定哪种环绕模式。
GL_REPEAT在字面理解为重复环绕,当纹理坐标落在纹理单元之后后,重复的对这个纹理单元进行取样,具体到应用可以理解为简单的重复平铺,当小型的纹理应用到大型的几何体这种效果比较试用。
GL_CLAMP平铺模式,可以理解为剪裁环绕。当需要对一大块区域进行纹理处理时,如果只选用单个纹理,可能会由于过大而无法载入内存,这时候可以用剪裁环绕,首先OpenGL会将单个纹理进行分割进行平铺处理。切割时对纹理坐标范围之外的纹理单元采用GL_CLAMP_EDGE平铺模式,对沿着纹理坐标合法的纹理单元最后一行或者一列进行采样。对于纹理坐标外围之外的纹理单元,采用GL_CLAMP_BORDER模式,这样边界纹理单元成为合法的纹理单元的额外的行和列呗应用。
需要注意的是当选用最邻近滤波时,GL_REPEAT是不起作用的,因为GL_REPEAT环绕时在处理边界是取得上一行或列的颜色平局值来处理边界的衔接,而最邻近滤波取得是特定的纹理单元,这样也避免了线性滤镜需要取周围颜色进行加权的问题。

void glTexParameTerf(GLenum target, GLenum panem, GLfloat param )

第一个参数制动应用哪种纹理模式,第二个参数指定了设置了哪种纹理参数,比如说我们应用纹理过滤设置纹理参数时时可以指定是放大过滤或缩小过滤的一种,第三个为设置了特定纹理参数的值。比如说我们应用纹理过滤时可以指定是最邻近过滤或线性过滤的一种。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 1 纹理基础 纹理是一种结构化的存储形式(Textures are a structured form of st...
    RichardJieChen阅读 15,493评论 0 9
  • 一、纹理基础 3D图形渲染中最基本的操作就是对一个表面应用纹理。纹理可以表现只从网格的几何形状无法得到的附加细节。...
    cain_huang阅读 8,579评论 0 7
  • 纹理(Textures) 我们已经了解到,我们可以为每个顶点使用颜色来增加图形的细节,从而创建出有趣的图像。但是通...
    IceMJ阅读 5,597评论 2 13
  • 纹理的基础知识 2D 纹理 2d纹理是OpenGlES中最基础和普遍的一种纹理结构。一个2d纹理,就是图片的数据的...
    Zsj_Sky阅读 5,324评论 0 8
  • 版本记录 前言 OpenGL 图形库项目中一直也没用过,最近也想学着使用这个图形库,感觉还是很有意思,也就自然想着...
    刀客传奇阅读 8,720评论 0 8