音视频学习四: Opengl ES Shader讲解

本文详细介绍了OpenGL ES中的Shader,包括如何生成YUV和PCM测试数据,以及GLSL语言的基础和特性。重点讲解了顶点着色器和片元着色器的作用,前者将顶点坐标转换为材质坐标,后者负责输出像素颜色。同时,提供了初始化Shader和绘制过程的代码示例。
摘要由CSDN通过智能技术生成
  • Shader

           

生成测试yuv数据和pcm数据命令:

ffmpeg -i test.mp4 -f si6le test.pcm
ffmpeg -i 720.mp4 -pix_fmt yuv20p -s 424x240 out.yuv

具体显示yuv数据 --- 着色器语言 GLSL (运行在显卡上,不消耗cpu)

-GLSL的基本语法与C语言基本相同

-它完美支持向量和矩阵操作

-GLSL提供了大量的内置函数来提供丰富的扩展功能

-它是通过限定符操作来管理输入输出类型的

①顶点着色器:顶点着色器被使用在传统的基于顶点的操作,例如位移矩阵、计算光照方程、产生贴图坐标。顶点着色器被应用指定,应用于客户的顶点转化是针对每个顶点执行一次,用于确定顶点位置

作用:顶点坐标输出成材质坐标

                              

②片元着色器:在片元着色器阶段只有唯一的varying 输出变量-即内建变量:gl_FragColo

是针对每个片元(可以理解为每个像素)执行一次,用于确定每个片元(像素)的颜色

作用:输出像素格式

 

                                                   

  • 顶点信息
float *vertexData = new float[12]{
    1.0f, -1.0f, 0.0f,
    -1.0f, -1.0f, 0.0f,
    1.0f, 1.0f, 0.0f,
    -1.0f, 1.0f, 0.0f};

 

              

// 顶点着色器 glsl代码
static const char *vertexShader = GET_STR(
        attribute
        vec4 aPosition; //顶点坐标
        attribute
        vec2 aTexCoord; //材质顶点坐标
        varying
        vec2 vTexCoord;   //输出的材质坐标
        void main() {
            vTexCoord = vec2(aTexCoord.x, 1.0 - aTexCoord.y);
            gl_Position = aPosition;
        }
);
  • 材质坐标
float *textureVertexData = new float[8]{
 1.0f, 0.0f,//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值