当前课程知识点:移动图形概论 >  第五章 颜色与纹理 >  5.3 立方体纹理 >  立方体纹理

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

立方体纹理在线视频

下一节:光照的基本概念

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

立方体纹理课程教案、知识点、字幕

各位同学 大家好

今天要为大家介绍的是OpenGL中的

立方体纹理

今天的主要内容包括

立方体纹理的基本概念和实现环境贴图的一种方法

立方体纹理也就是3D纹理

其结构是围绕着对象的

6个2D纹理组成的立方体

立方体贴图通常用作skybox

也就是环境贴图

可以作为场景中的环境背景

产生真实空间的效果

在需要反射和折射的建模应用中也有重要的应用

组成立方体贴图需要6个2D纹理

立方体的每个面需要一个

而环境的每个面都有一个识别方式

其中顶部和底部是+Y和-Y面

正面和背面是+Z和-Z面

左面和右面是-X和+X面

这个图是构成立方体贴图六个面的6个图像示例

是对一个真实场景的全景360度摄影图片

想象一下

把六个面的贴图对应的贴到一个巨大的立方体的内面

当观察者位于立方体中心的时候无论他朝什么方向观察

都和拍摄照片时的情景类似 有种身临其境的感觉

立方体贴图是一个立方体

2D纹理坐标在此不适用

因此 将使用3D向量来计算使用哪个纹理面

以及要使用纹理面上的哪个纹理元素

着色器语言中的有个函数叫textureCube

它可以通过一个3D向量来查询这个向量所指向的立方体内表面的位置

所对应纹理元素的取值

这是相关示例代码的运行效果

可以看到随着三角形的旋转

它的镜面表面可以准确的反射出周围的环境

可以按照常规纹理的加载方式来加载在立方体纹理

立方体纹理包括6个2D图像

在下面的示例中

来自6个2D图像的数据将保存在image1到image6中

第一行代码创建纹理对象

可在该对象中生成立方体纹理

第二行代码绑定立方体纹理对象

以便对其进行操作

这段代码基于6个2D图像创建立方体纹理

请注意

我们将各个图像分配到立方体纹理的不同面

例如

从image1获取的数据

将存储为立方体纹理的–Z面

这两行代码

定义立方体纹理的缩小和放大过滤模式

都采用了最优的插值算法

最后两行代码

指定立方体纹理的每一面

都将被限制在边缘以内

这有助于确保图像边缘无缝衔接

在大多数情况下

依然可以使用 PoverVR框架提供的textureUpload函数

来加载立方体纹理

只需向创建的纹理映射

提供PVR文件的文件名

例如在这里的示例代码中

加载了名称为 cubemap.pvr 的纹理文件

只需一行代码

就实现了前面六行代码的功能

我们的示例代码为 15_CubeMap

它通过 CubeMap

建立了一个巨大的立方体

然后在立方体的内表面进行贴图

在着色器程序中

采用这个立方体的世界坐标

作为3D向量的方向

进而用 textureCube函数进行纹理映射

接下来看一下具体代码

这个代码定义了六个面的12个三角形的顶点

需要注意的是每个三角形的顶点顺序

一定要使其法线方向指向内部

可以和同一个代码中的Cube类比较

每个三角形的顶点顺序都是不一样的

这段代码用来生成顶点数组

其中CS是缩放系数

相当于建立了一个边长为50个单位的立方体

每个顶点有9个数据

其中

前三个数据是顶点坐标

接下来六个数据

只是为了共用着色器代码

与其它模型的顶点数据结构一致

其中的3.0

代表这里保存的不是颜色值

也不是2D纹理

而是立方体纹理

后面的法线信息也没有使用 赋值为0

顶点着色器中

world Pos

是将顶点数组中的坐标乘以了MMatrix

也就是模型矩阵

得到的是世界坐标

在片段着色器中

对读入的第二个3维属性值texture_or_color进行判断

其中 r分量大于1

小于2.5的时候

是2D纹理

用texture2D来处理

大于2.5时是3D纹理

使用textureCube来计算片段的颜色

其中

sCubeMap是立方体纹理对应的采样器变量

这样立方体内部的颜色

就与3D纹理对应起来了

好 这节课的内容就到这里

谢谢大家

移动图形概论课程列表:

第一章 课程简介

-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 中的实用工具介绍

-综合测试

立方体纹理笔记与讨论

也许你还感兴趣的课程:

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