YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考: <音视频基础知识-YUV图像> YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能直接用于显示,需要转换为RGB格式才能显示,因而YUV数据渲染实际上就是使用Opengl ES将YUV数据转换程RGB数据,然后显示出来的过程. 也就是说Opengl ES之所以能渲染YUV数据其实就是使用了Opengl强大的并行计算能力,快速地将YUV数据转换程了RGB数据. 本文首发于微信公总号号:思想觉悟 更…
Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, check out iOS 5 by Tutorials Second Edition! Note from Ray: This is the fourth iOS 5 tutorial in the iOS 5 Feast! This tutorial is a free preview cha…
混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个片元的加权比例的. 经过加权计算后,最终片元的某些通道值可能会超过1.0,此时渲染管线会自动执行截取操作,将大于1.0的通道值设置为1.0 OpenGL ES系统预置因子值 常量名 RGB混合因子 A混合因子 GL_ZERO [0,0,0] 0 GL_ONE [1,1,1] 1 GL_SRC_COL…
通常在Android上使用OpenGL ES,都是希望把渲染后的结果显示在屏幕上,例如图片处理.模型显示等.这种情况下,只需要使用Android API中提供的GLSurfaceView类和Renderer类,在这两个类提供的初始化.回调函数中设置/编写相应的代码即可.不过,如果不希望把渲染结果显示在屏幕上,也就是所说的离屏渲染(offscreen render),这两个类就帮不上忙了.在此介绍一下如何在Android系统上做OpenGL ES 的离屏渲染. 1.基础知识 要想使用OpenGL…
1. EGL概述 EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现. EGL提供如下机制: 与设备的原生窗口系统通信 查询绘图表面的可用类型和配置 创建绘图表面 在OpenGL ES 和其他图形渲染API之间同步渲染 管理纹理贴图等渲染资源 为了让OpenGL ES能够绘制在当前设备上,我们需要EGL作为OpenGL ES与设备的桥梁. 2. 使用EGL绘图的基本步骤 Displ…
前因 最近在尝试使用Opengl ES实现一些LUT滤镜效果,在实现这些滤镜效果的时候遇到一些兼容性的坑,踩过这些坑后我希望把这几个坑分享给读者朋友们, 希望同在学习Opengl ES的朋友们能少走弯路. 关于LUT滤镜相关的介绍,也是这个Opengl ES系列入门教程的一项内容,在后面的文章中会专门介绍,这里暂时不展开讲解,后续大家敬请期待. 踩坑详情 1.着色器编译报错 有以下这个片元着色器,在其他手机上正正常编译,但是在华为鸿蒙系统上却编译报错: #version 300 es preci…
前言 说到矩阵变换,我们第一时间想到的就是大学时代的线性代数这些复杂的东西,突然有了一种令人从入门到放弃的念头,不慌,作为了一个应用层的CV工程师, 在实际应用中线性代数哪些复杂的计算根本不用我们自己去算,绝大部分情境下直接使用Matrix这个类或者glm这个库即可. 关于矩阵与向量的相关知识,矩阵的加减乘除等规则,这里就不展开细说,感兴趣的同学自行查阅线性代数即可,不过这些规则忘记了也没关系,反正有API可用. 我们知道在Opengl中有很多中坐标系,在Opengl中矩阵的一大作用就是将坐标从…
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLAM.Marker-Based还是GPS的方法,就不一而足了. 所以说要在手机上进行现实场景的展现也是目前AR应用一个比较重要的模块.一般来说,在移动端,基本上都是使用OpenGL ES进行绘制.所以我们优先考虑使用OpenGL ES进行相机的绘制.当然,有些应用直接利用iOS的UIImage进行相机…
[TOC] 背景概述 在OpenGL绘制图形时,可能需要绘制多个并不相连的图形.这样的情况下这几个图形没法被当做一个图形来处理.也就需要多次调用 DrawArrays 或 DrawElements. 如果图形很多,可能会需要用一个循环来调用: for (int i = 0; i < num_objects; i++) { glDrawArrays(GL_TRIANGLES, object[n]->first_vertex, object[n]->vertex_count); } 每一次调…
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视差贴图(Parallax Mapping) 和 位移贴图(Displacement Mapping). 经过一番研究, 搜索阅读了不少文章, 终于确定, OpenGL ES 2.0 可以支持 视差贴图, 不过暂时还没什么好办法支持 位移贴图. 因为就我目前所了解的位移贴图, 有这么两种方法来实现,…