当前课程知识点:移动图形概论 >  第五章 颜色与纹理 >  5.2 纹理素材的使用 >  纹理素材的使用

返回《移动图形概论》慕课在线视频课程列表

纹理素材的使用在线视频

下一节:立方体纹理

返回《移动图形概论》慕课在线视频列表

纹理素材的使用课程教案、知识点、字幕

各位同学大家好

今天要为大家介绍的是

OpenGL 中的纹理

今天的主要内容

包括

二维纹理的基本知识介绍

和使用PowerVR工具

创建纹理的方法

以及纹理文件

使用过程中会用到的函数

在图形应用中

虽然可以通过

设置顶点颜色

来设计模型的外观

但对于复杂的图案

更加有效的方式

是利用图片来进行渲染

这种应用于

图形对象几何形状的图像

就被称为纹理

纹理通常是2D纹理

或者立方体纹理

这节课主要介绍前者

2D纹理

实际上就是图像数据组成的二维数组

因此

可以通过一对坐标

定位纹理的具体位置

这个坐标通常定义为

U和V组成的二维对

在应用于

对象的三角形几何形状时

顶点数组中

将提供纹理坐标

来定位纹理覆盖在三角形上的形式

作为纹理的图像尺寸

最好是2的整数次幂

例如

2x2 4x4

也可以是长方形

32x16

128x32 等

在OpenGL中

纹理映射的坐标范围

从左下角的 0.0 0.0

到右上角的 1.0 1.0

这些坐标

代表查找纹理元素的归一化坐标

如果在顶点数组中

使用的坐标

超出该归一化范围定义的纹理坐标

并将产生由纹理环绕模式定义的行为

我们将在后面说明纹理环绕模式

右面三角形的三个顶点

提供了三个纹理坐标

这样就可以将纹理数据

映射到这个三角形中了

纹理映射数据具有多种格式

格式的类型决定了

数据中保存的数据类型

例如

GL_RGB

用于在纹理映射中

保存

红色绿色和蓝色纹理元素数据

透明度有效值为1.0

GL_LUMINANCE

用于在纹理映射中

保存纹理元素灰度的亮度

有效值R = G = B = 亮度

A = 1.0

GL_ALPHA

用于在纹理映射中

保存纹理元素的透明度值

通常用于Alpha测试

比如

只有透明度大于某一阈值的

才可以被绘制

接下来

我们用代码来定义一个纹理

这个纹理只有四个点

分别定义为红绿蓝和黄色

每个颜色有RGBA四个分量

要把刚才定义的图像数组转换为

可用的纹理

还需要一些代码

这里可以看到示例代码

第一行

用 glGenTextures 函数创建纹理对象

用_texture变量作为句柄

第二行代

码绑定该纹理对象

以便对其进行操作

第一个参数

GL_TEXTURE_2D

表示正在创建2D纹理

第三行代码

将图像数组数据

提交给纹理对象

这三行代码与顶点缓冲区的创建类似

都是先Gen

然后Bind

最后传递数据

具体看一下

glTexImage2D函数的参数

第一个参数表明是2D纹理

第二个参数0和细节层次贴图有关

稍后介绍

GL_RGBA

指定纹理的内部格式

2

指定纹理宽度

下一个2指定纹理高度

接下来的0

指定边框大小

必须为0

GL_RGBA

指定纹理元素的内部格式

一般与纹理的内部格式相同

GL_UNSIGNED_BYTE

指定纹理元素数据的数据类型

最后的image

指定

指向存储器中图像数据的指针

最后两行代码

定义纹理映射的缩小和放大过滤模式

一般使用线性插值的方式

进行计算放大

或者缩小的最优取值

在大多数情况下

用数组创建纹理比较不直观

可以使用保存好的纹理文件提供数据

PowerVR框架

提供textureUpload函数

通过保存在文件中的纹理数据

创建纹理对象

textureUpload有三个参数

第一个参数

指定资源提供者的名称

一般可以使用

我们用PVR框架建立的

Shell实例

第二个参数是

文件文件的文件名

第三个参数

指定OpenGL ES的版本

是否为2

细节层次贴图或者叫mip贴图

是一系列不同分辨率的纹理映射

对应不同的缩放级别

这里可以看到

0级1级和2级的纹理图像

后一个级别的边长

是前一个边长的一半

最小可以是1x1的纹理

在介绍glTexImage2D函数

第二个参数的0

就是指定0级的纹理映射数据

mip贴图

用于实现性能提升和减少伪影

如果在场景中

渲染的对象较小

则将使用较小版本的纹理数据

这将减小带宽并简化处理

也有助于确保对象较小时

拥有合适的外观

例如

不同级别的纹理

可由艺术家创建

而不是使用

大纹理中的少量样本进行创建

OpenGL

还提供了

glGenerateMipmap函数

来自动生成mip贴图

它根据已经创建的0级纹理

生成完整的不同级别纹理数据

这个函数只有一个参数

是生成贴图的纹理目标

可以是

GL_TEXTURE_2D

GL_TEXTURE_CUBE_MAP

可即使具有完整的mip贴图

渲染的三角形尺寸

也不一定能和纹理图片一致

因此

对于缩放的处理方式就要进行设置

图形硬件将根据片段

自动决定

执行哪种类型的过滤

如果对象大于最大纹理

将始终

对最大纹理进行采样

可以使用glTex

Parameter()设置过滤模式的参数

不同的参数设置

对生成纹理的质量

及花费的时间产生影响

glTexParameter()函数有四个版本

后缀为“i”的版本用于整数参数

后缀为“f”版本用于浮点参数

后缀“v”版本与数组值一起使用

第一个参数 target

用于指定目标纹理

分别对应2D和3D纹理

函数的第二个参数

用来指定纹理的可设置参数

其中

GL_TEXTURE_MIN_FILTER

用于设置缩小模式

GL_TEXTURE_MAG_FILTER

用于设置放大模式

GL_TEXTURE_WRAP_S

GL_TEXTURE_WRAP_T

用于设置在给定坐标

超出归一化范围的纹理坐标时

如何使用纹理

在设置缩小模式时

函数的第三个参数

可以设置为六个算法类型

GL_NEAREST

将根据所提供的纹理坐标

返回

纹理元素的最接近的单点采样值

GL_LINEAR 算法

将根据

与纹理坐标最近的四个点

返回纹理元素的双线性插值

这两个算法

都不使用mip贴图

第三个算法

返回GPU自动选择的

最接近贴图等级的单点采样值

第四个算法

返回由GPU自动选择的

两个最接近贴图等级的单点采样值

然后再做线性插值

GL_LINEAR_MIPMAP_NEAREST

返回

最接近所选贴图等级的

双线性采样值

GL_LINEAR_MIPMAP_LINEAR

返回

最接近两个所选贴图等级的

双线性采样值的

线性插值

这通常称为

三线性过滤

可实现所有OpenGL ES核心模式的

最佳质量

对于放大过滤

由于始终使用最大纹理

因此

参数只能是

GL_NEAREST

GL_LINEAR

含义与缩小模式中同名参数一致

如果顶点数组中

定义的纹理坐标

不在 0 1范围内

就会发生环绕

当设置环绕模式时

也就是

pname = GL_TEXTURE_WRAP_S

GL_TEXTURE_WRAP_T

函数第三个参数

可以是这里显示的三个宏

我们以下图纹理为例

看一下不同设置的效果

这里蓝色虚线只是标识了图像范围

并不是纹理的一部分

GL_CLAMP_TO_EDGE

会使

超出纹理坐标限制的部分

取值为边界值

相当于边界得到了扩展

再次提示一下

蓝色虚线框

不是纹理的一部分

因此不会出现在实际结果中

GL_REPEAT

会使

超过纹理坐标的部分

形成重复图案

也相当于

纹理坐标的整数部分被忽略

只使用小数部分

GL_MIRRORED_REPEAT

与GL_REPEAT相似

但纹理坐标经过镜像处理

显示出图片中展示的模式

今天的课程就到这里

谢谢

移动图形概论课程列表:

第一章 课程简介

-1.1 课程基本情况介绍

--课程基本情况介绍

-1.2 GPU 相关基础知识

--GPU 相关基础知识

-1.3 OpenGL ES 技术发展历史

--OpenGL ES 技术发展历史

-1.4 PowerVR SDK 安装和使用

--PowerVR SDK 安装和使用

-第一章测试

第二章 图形编程入门

-2.1 OpenGL ES 基本概念

--OpenGL ES 基本概念

-2.2 编写第一个图形程序

--编写第一个图形程序

-2.3 主要 API 介绍

--主要 API 介绍

-第二章测试

第三章 OpenGL ES 变换

-3.1 矢量和矩阵知识基础

--矢量和矩阵知识基础

-3.2 旋转与位移变换

--旋转与位移变换

-3.3 OpenGL ES 变换基础

--OpenGL ES 变换基础

-第三章测试

第四章 OpenGL ES 着色器

-4.1 着色器编程语言介绍

--着色器编程语言语法

--着色器编程语言特殊语法

-4.2 着色器编程实例

--着色器编程实例

-第四章测试

第五章 颜色与纹理

-5.1 颜色的基本概念

--颜色的基本概念

-5.2 纹理素材的使用

--纹理素材的使用

-5.3 立方体纹理

--立方体纹理

-第五章测试

第六章 光源与光照

-6.1 光照的基本概念

--光照的基本概念

-6.2 光源模型

--光源模型

-6.3 使用着色器渲染颜色

--使用着色器渲染颜色

-6.4 反射与折射

--反射与折射

-第六章测试

第七章 基于物理的渲染

-7.1 基于物理渲染的基本概念

--基于物理渲染的基本概念

-7.2 基于图像的照明

--基于图像的照明

-7.3 PBR 的实现

--PBR 的实现

-第七章测试

第八章 PowerVR 工具简介

-8.1 Vulkan 介绍

--Vulkan 介绍

-8.2 SDK 中的实用工具介绍

--SDK 中的实用工具介绍

-综合测试

纹理素材的使用笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。