当前课程知识点:移动图形概论 > 第五章 颜色与纹理 > 5.1 颜色的基本概念 > 颜色的基本概念
同学们大家好
今天给大家介绍一下
opengles中颜色的相关知识
今天要介绍的主要内容
包括opengles中
颜色的基本表示方法
和在应用程序中
将坐标与颜色等数据
传递给
顶点着色器的编程方法
数字化的颜色
一般
都可以通过rgb3个分量
或者通道来表示
分别代表红色绿色和蓝色
另外还有一个颜色分量
叫做Alpha分量
用来表示色彩的透明度
透明度在多个颜色
进行混合的时候
将显示出透明的效果
在opengLES中
四个颜色分量
都取自0到1之间的浮点数
其中
前三个分量
分别代表一种色彩的强度
例如这个示例
全部的元素中
都是1的四维矢量
就代表了白色
而其中Alpha分量等于1
代表颜色不透明
在程序中
我们把顶点数据的内容进行修改
在每个顶点坐标数据后面
增加一个三维矢量的颜色值
每个颜色值都有不同的rgb分量
也就是这个三角形的
三个顶点
都被赋予了不同的颜色
在刚才的例子里
我们把顶点数据的坐标和颜色
交错保存在同一个一维数组里
而另外一种做法
采用两个单独的数组
分别来保存
顶点位置坐标
和颜色数据
但采用交错数据保存顶点数据的方法
有明显的优势
在程序中
顶点缓冲区对象
可以只建立一个
数据拷贝
也只需要进行一次
对于gpu而言
一个顶点有关的数据
都保存在临近的位置
访问起来效率会比较高
不过使用交错数据时
我们需要向GPU告知数据的结构
让着色器程序
可以正确处理的其中的数据
这里是建立顶点缓存对象的示例代码
这里与第一个程序唯一的不同是
拷贝数据的大小有了变化
由于每个顶点有六个浮点数据与之对应
因此
对于3个顶点
需要拷贝18个浮点数到缓冲区
为了让gpu
能正确的使用
交错数据的顶点缓冲对象
必须要让
gpu了解
该缓冲区对象的数据结构
其中
一个重要的概念
就是数据之间的步长
也就是
gpu在访问一个顶点的数据之后
需要将指针移动多少
才可以访问到下一个顶点数据
程序中
我们用stride这个变量
来记录这个步长
也就是
六个浮点数占用的空间
绘制三角形的代码
也与没有颜色数据的代码比较接近
这里我们可以看到
第一行代码
是激活顶点缓冲区对象vbo
第二行代码中
我们把着色器中的第一个属性激活
这里可以参考右上角的着色器代码
它有两个输入属性
分别是顶点坐标和颜色
索引号分别为0和1
在接下来看程序中
用
glVertexAttribPointer函数
告诉gpu刚刚激活属性的
所对应的数据存储结构
回顾这个函数的定义
第一个参数为0
是着色器属性的索引号
第二个参数为3
表示每个数据有3个分量
第三个参数指定数据类型为浮点数
第四个参数表示
并不需要进行标准化
第五个参数
就是我们前面计算的步长值
第六个参数
表示数据从数组的第一个元素开始
接下来
代码激活了着色器代码的第二个属性
这个属性就是顶点的颜色输入
继续用
glVertexAttribPointer函数
说明数据存储结构
与前面不同的是
第一个参数是索引号为1
最后一个参数
表示颜色数值
从数组的第四个浮点数开始
也就是告诉GPU
从第四个分量
开始的3个分量
是第一个颜色
4+6
从第10个分量开始
3个分量
是第二个颜色
10+6
从第16个分量开始的
3个分量是第三个颜色
程序的运行结果如这个图所示
同学们可能会奇怪
我们只定义了三个顶点的颜色
为什么这个三角形上面
显示的颜色这么多样呢
这就与片段着色器
在运行时的特性有关了
我们再来看一下着色器程序的代码
左边是顶点着色器
右边是片段着色器
虽然在顶点着色器中
传递给片段着色器的颜色
都是我们在程序中设置好的固定值
但片段着色气在光栅化之后
有一些片段
并不是我们定义的顶点
这时
这个片段所对应的颜色就通过
线性插值的方式
由已知的三个顶点来获取
不光是颜色
对于我们后面将会用到的纹理坐标
法向向量
都会通过这种方式
获得非顶点片段所对应的值
好
今天的课程内容就到这里
-1.1 课程基本情况介绍
--课程基本情况介绍
-1.2 GPU 相关基础知识
-1.3 OpenGL ES 技术发展历史
-1.4 PowerVR SDK 安装和使用
-第一章测试
-2.1 OpenGL ES 基本概念
-2.2 编写第一个图形程序
-2.3 主要 API 介绍
-第二章测试
-3.1 矢量和矩阵知识基础
-3.2 旋转与位移变换
--旋转与位移变换
-3.3 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 的实现
-第七章测试
-8.1 Vulkan 介绍
-8.2 SDK 中的实用工具介绍
-综合测试

