OpenGL/ES关于像素渲染
知道着色器的人都会知道一个东西,那就是着色器分为顶点着色器与片元着色器。在移动端真正渲染到手机屏幕上的无非是一些颜色值,但是一个片元是大于一个像素的,一个片元可能包含多个像素,当然一个片元所包含的像素的多少是与手机屏幕分辨率有关系的。
那么我们该怎么操纵像素,我想对我整个场景渲染出来的一些东西进行像素操做。比如说,都知道在CPU端,如果你使用了MSAA多重采样抗锯齿,那么对于手机性能来说,是很拖累的。所以我想把这个多重采样抗锯齿的东西转移到GPU端来,不在CPU端去堵塞渲染的主线程了,那么这个时候就需要对这幅FBO纹理的像素进行操作。一副图片是有自己的宽高的,其宽高说的是这幅图片的像素多少,宽100,高100,那么,这幅图片一共拥有100*100个像素。我们知道了这副纹理的像素大小了。我们在片元着色器,纹理采样的坐标为ST,对应到纹理的像素大小,我们对应过来,就是1/S,1/T,这就是每个像素的大小,我们知道了像素的大小,那么就可以根据当前的采样的纹理的坐标值,计算出来其周围八个像素或者更多像素的采样值,我们取到这些采样值后,进行一些算法运算就可以了,比如说我可以进行多重采样抗锯齿。不懂MSAA抗锯齿原理的可以自己看看书。根据器原理,我们就可以做出来很多精细化的对像素操作的特效渲染。
代码(片元着色器):
float stepS = 1/TexWidth;
float stepT = 1/TexHeight;
float currS = TexCoords.s;
float currT = TexCoords.t;
color0 = texture2D(Texture, vec2(currS,currT));
color1 = texture2D(Texture,vec2(currS + stepS,currT + stepT));//后面依次类推,可以计算出来当前像素周边的像素。
取到了多个像素后,就可以进行模糊,锐化,灰度,渐变,抗锯齿等等这些关于纹理或者FBO纹理特效的开发了。也可以自己套进去一个椭圆的公式,那么后期渲染出来的图片就变成一个有圆形轨迹的图片了,当然,如果加入OpenCV识别到人脸,那么也可以对人脸进行变形,变大,变成啥都行,用matlab训练出来一套算法,这些都不在困难。
OpenGL/ES关于像素渲染的更多相关文章
- 详解 OpenGL ES 2.x 渲染流程
khronos官方对OpenGL ES的描述如下: OpenGL ES is a royalty-free, cross-platform API for rendering advanced 2D ...
- Android OpenGL ES 离屏渲染(offscreen render)
通常在Android上使用OpenGL ES,都是希望把渲染后的结果显示在屏幕上,例如图片处理.模型显示等.这种情况下,只需要使用Android API中提供的GLSurfaceView类和Rende ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
- 【Android Developers Training】 62. 搭建一个OpenGL ES环境
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- [cocos2d-x]OPENGL ES支持的像素格式
OPENGL ES最多支持32位颜色值. 支持的像素格式有以下几种: 客户端格式 GL格式 GL数据类型 字节数 RGBA8888 GL_RGBA GL_UNSIGNED_BYTE 4 RGB888 ...
- 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 深度剖析OpenGL ES中的多线程和多窗口渲染技术
由 创新网小编 于 星期五, 2014-04-11 14:56 发表 移动设备中的CPU和GPU已经变得很强大,到处都是配备一个或多个高分辨率屏幕的设备,需要使用带有图形驱动器的复杂交互也日益增加.在 ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之LayerColor(8)
在前面文章中讲述了Cocos2d-x引擎OpenGL渲染准备Shader方面,本文主要讲解使用LayerColor来讲述OpenGL的渲染过程. 1.LayerColor对象创建 添加LayerCol ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)
Cocos2d-x底层图形绘制是使用OpenGL ES协议的.OpenGL ES是什么呢? OpenGL ES(OpenGl for Embedded System)是OpenGL三维图形API的子集 ...
随机推荐
- 同步gitlab与github
1.找到setting 2.找到左下方的developer setting 3.按标好的数字依次执行 4.填写note并勾选repo 5.在最左下方勾选 6.保存生成的新的token到其他地方,之后你 ...
- Javascript对象数据类型(键值对)的创建和使用方法
对象数据类型(键值对) 1.创建键值对 var arry={name:"小明",age:20,isgey:falet} // var 键值对名 = {键:值,键:值} 2.增加键值 ...
- RT-Thread移植入门学习
一.简介 RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2).实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时.嵌入式系 ...
- Fastjson反序列化漏洞分析 1.2.22-1.2.24
Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...
- mybatis 原生写法创建项目
一.创建全局文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuratio ...
- 使用Xamarin开发移动应用示例——数独游戏(六)使用数据库
项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 现在我们希望为应用增加更多的功能,比如记录每个完成的游戏,可以让用户自己添加 ...
- Velero:备份、迁移Kubernetes集群资源和PV
Velero基本介绍 官方文档:https://velero.io/docs/v1.4/ 基本工作原理: 不管需求是实现什么,比如:集群迁移.恢复.备份,其核心都是通过velero client CL ...
- Redis设计与实现
简述Redis设计与实现 Redis是一个高性能的key-value的非关系型数据库,Redis是运行在内存中的一种数据库,但是它也可以持久化到磁盘中,Redis的实现有着更为复杂的数据结构并且提供对 ...
- String类为什么可以直接赋值
在研究String直接赋值与new String的区别之前我们需要先了解java中的字符串常量池的概念 字符串常量池 String类是我们平常项目中使用频率非常高的一种对象类型,jvm为了提升性能和减 ...
- VC 常用
转载请注明来源:https://www.cnblogs.com/hookjc/ ------------------------------------------------------------ ...