首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenGL: 如何利用 Shader 实现 RGBA 到 NV21 图像格式转换?(全网首次开源)

上面几种方式虽然能在一定程度上解决大图读取的性能问题,但又带来了实现复杂度高和兼容性等问题,比如 HardwareBuffer 需要 Android 26 以上版本等。...[VU plane 偏移采样] offset 需要设置为一个像素归一化之后的值:1.0/width, 按照原理图,为了便于理解,这里将采样过程简化为以 4 个像素为单位进行,在纹理坐标 y < (2/3...= 2.0 / 3.0; void main() { vec2 texelOffset = vec2(u_Offset, 0.0); if(v_texCoord.y UV_DIVIDE_LINE...vec2 texCoord = vec2(v_texCoord.x, (v_texCoord.y - UV_DIVIDE_LINE) * 3.0); vec4 color0 = texture...(s_TextureMap, texCoord); vec4 color1 = texture(s_TextureMap, texCoord + texelOffset);

2.6K51

使用 OpenGL 实现 RGB 到 YUV 的图像格式转换

上面 YUV 转 RGB shader 中,面试官喜欢问的问题(一脸坏笑):为什么 UV 分量要减去 0.5 啊? (迷之自信)答曰:因为归一化。...YUV 格式图像 UV 分量的默认值分别是 127 ,Y 分量默认值是 0 ,8 个 bit 位的取值范围是 0 ~ 255,由于在 shader 中纹理采样值需要进行归一化,所以 UV 分量的采样值需要分别减去...Plane 的数据,GL_LUMINANCE_ALPHA 纹理用来加载 UV Plane 的数据,这一点很重要,初学的读者大人请好好捋一捋。...[shader 实现 RGB 转 YUV 原理图] 我们要将 RGBA 转成 YUYV,数据量相比于 RGBA 少了一半,这就相当于将两个像素点合并成一个像素点。...(一脸坏笑): RGBA 转 YUV 的 shader 中 uv 分量为什么要加 0.5 ?

7.5K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试官:请使用 OpenGL ES 将 RGB 图像转换为 YUV 格式。我 ……

    上面 YUV 转 RGB shader 中,面试官喜欢问的问题(一脸坏笑):为什么 UV 分量要减去 0.5 啊? 答曰(迷之自信):因为归一化。...YUV 格式图像 UV 分量的默认值分别是 127 ,Y 分量默认值是 0 ,8 个 bit 位的取值范围是 0 ~ 255,由于在 shader 中纹理采样值需要进行归一化,所以 UV 分量的采样值需要分别减去...其中 GL_LUMINANCE 纹理用来加载 NV21 Y Plane 的数据,GL_LUMINANCE_ALPHA 纹理用来加载 UV Plane 的数据,这一点很重要,初学的读者大人请好好捋一捋。...shader 实现 RGB 转 YUV 原理图 我们要将 RGBA 转成 YUYV,数据量相比于 RGBA 少了一半,这就相当于将两个像素点合并成一个像素点。...(一脸坏笑):RGBA 转 YUV 的 shader 中 uv 分量为什么要加 0.5 ?

    5.2K41

    ThreeJS 立方体贴图

    在上一篇《ThreeJS 掏洞术》中,利用ThreeBSP完成了在‘墙’上掏出‘门’或‘窗户’洞的效果。...那么本文将‘简单描述’一下给立方体贴图的过程,我之所以说‘简单描述’是因为这里涉及的领域比较多,所以文中的内容就不做过多扩展描述了,只简述关于《ThreeJS 立方体贴图》的干货。.../crate.jpg') } ) ); scene.add(mesh); 这样就将图片覆盖到了立方体的6个面上,以下是效果图 ? ?...如果你想6个面分别贴不同的图的话也好办,最简单的方法是,Mesh构造函数的第二个参数,可以直接传一个Material数组,所以我们可以创建对应6个面的MeshBasicMaterial数组,那么现在演示如何将下面...本文到此结束,有时间会写一篇关于UV Mapping的贴图方式,比这个稍微复杂点,其实也很简单,今天就先到这里,欢迎评论,提意见! ---- 转发请注明本文链接。

    3.1K50

    数据可视化大屏产品在滴滴的技术探索

    图3.5 map3配置面板 工具还附带可水纹效果、背景效果,可以把three.js官网中的示例很方便的接入进来,还可以使用threejs中的各种材质,添加多种类型的灯光。 4. 轨迹 ? ?...根据之前配置的半径大小,会在灰度图上生成一个对应大小的渐变圆,根据可配置的模糊因子,可使圆点带有模糊效果。 2)灰度(透明度)叠加 ?...想到的第二种方案就是100个点全部绘制,在render的过程中z不断变换顶点对应的uv坐标。...例如开始是第0~30个对应的uv坐标从0~1,下一次是第10~40个点对应的uv坐标从0~1,以此类推可以满足1/3长度的飞线展示完整的纹理,且不断移动。...在这里还有个优化,一开始是在每次render的时候去遍历uv数组更改每个点对应的值,但是遍历数组也是耗性能的,特别是当数据量大的时候,后来是将一个常数传进了shader中用于计算每个点此时的uv坐标,每次

    2.8K11

    基于threejs的商品VR展示平台的设计与实现思路

    目录 基于threejs的商品VR展示平台的设计与实现思路 前言 总体开发方案设计 总体开发设计思维导图 模型制作模块 前端展示模块 存储模块 后端管理模块 后台管理实现 商品模型制作 商品模型前期准备...在浏览器和Threejs以及云数据库做储存的支持下处理和产生三维立体的虚拟空间环境,使得浏览者有了身临其境的“沉浸感”和人机交互的能力。...总体设开发设计思维导图如下图所示: 总体开发设计思维导图 对于企业用户,该平台实现如下的功能: 可以加载产品模型,可以将制作的三维模型添加到特定的虚拟环境中,前提是符合系统平台支持的文件格式的三维模型文件...,用于制作商品模型的局部UV贴图等,更好的将商品模型制作出来。...商品模型组件制作 根据蛋糕商品的原型以及相关信息,开始制作蛋糕的3D模型。对于常用的基础模型Threejs已经集成封装好了,但是稍微特殊一点的模型就需要单独去制作。

    72240

    外国小哥花16个月用Three.JS打造了一个无缝切地图的3D开车游戏

    01 生成高度图 使用类似于PerlinNoise的算法生成无限平铺的高度图,并加以修改以实现更为逼真的山景。 使用Alea这个库来生成伪随机数。...选择一个方向来测试周围的高度图用以评估横向和纵向的梯度。 然后,使中线向一个坡度最小的方向移动10米。这个点的信息被写一个双向链表中,每个点位信息都包含坡度,道路宽度,曲率等元数据。...04 图形 地面纹理采用世界坐标UV,并混合PerlinNoise以改变植被的颜色。 基于坡度混合悬崖面纹理和顶点位移。...所有树叶都由简单的精灵图和几何体组成,将多种变化存储在一个纹理图中,该纹理使用顶点着色器中的噪声采样。 05 物理系统 每个轮子都单独结合重力,摩擦力和地面法线来独立计算物理上动力学的特性。...体验地址 https://ezshine.jnsii.com/cases/slowroads/ 和往期分享的threejs项目一样,这个赛车游戏的本地项目代码大帅也已经备份到AwesomeSites仓库中的

    2.4K10

    网格UV展开

    原文链接 UV展开是什么 参数曲面的参数域变量一般用UV字母来表达,比如参数曲面F(u,v)。所以一般叫的三维曲面本质上是二维的,它所嵌入的空间是三维的。...如下图所示,左图是右边网格在参数平面上的展开,这样每个顶点都有了一个uv参数值,这也被称为纹理坐标。 图1 ---- 什么样的网格可以做UV展开 那是不是所有的网格都可以做UV展开呢?答案是否定的。...一种直观的观察展开扭曲程度的方式是,把一张棋盘格图片贴到网格上,棋盘格越均匀,UV展开扭曲越小。 ---- 固定边界与自由边界 如图所示,左图是自由边界的UV展开,右图是固定边界的UV展开。...把网格顶点映射到纹理坐标域所得到的2D网格,和原始网格的拓扑结构可以是不同的。你可以把这两个网格看成是两个独立的网格。纹理坐标的缝隙是2D网格的边界。...如下图所示,网格UV展开到平面后,把网格对应的贴图填充到UV坐标域,就得到了右边的纹理图。网格在渲染的时候,每个三角片离散化后,每个离散点会根据UV坐标值去纹理图里拾取颜色。

    3.1K30

    Web 3D机房,智能数字机房HTML5 WebGL(ThreeJS)匠心打造「建议收藏」

    ---- 机房3D效果图 ---- 机房线缆和走线架 线缆的连接走向和连接关系是管理员关注的焦点。机架中的网络设备或服务器设备会通过端口和线缆进行连接,组成一定结构的网络。...先用一个线框把机柜位置显示出来,再把一个高度符合使用比例的立方块显示出来就行了,类似一个柱状图。设置一下颜色、光照等属性,让它看上去更真实: 空调风向 机房中的空调冷风流向也是一个需要监控的业务。...动力环境监控 动力环境监控的对象主要是机房动力和环境设备等设备,像配电、UPS、空调、温湿度、漏水、门禁、安防、消防、防雷等等,这些通常会有独立的采集和监控系统,我需要做的是把动环的效果用3D呈现,并且和系统的真实数据进行对接...温度云图模拟了热衰减的过程,并在地板上留下痕迹。同样,纵向的设备上也通过温度数值来生成色差不同的温度图贴在机架上。...设备报警 巡更路径 ---- Web 3D机房,智能数字机房HTML5+Threejs(WebGL) 项目实战 【课程介绍】 针对webgl的库threejs框架的Web 3D智能数字机房项目实战详细的讲解

    3K20

    UE(6):LightMap

    Lightmap UV 上图是纹理UV和LM的UV的不同,纹理UV不需要考虑光源的影响,而LM中不同位置下收到的光源的影响也不同,因此每一个位置都需要独一无二的UV。...我对如何生成LM的UV算法,并没有研究,刚才说的都是看UE的文档了解的,假设我们现在已经创建了UV。 Lightmap UV UE中还可以选择显示LM的密度,可以查看LM的分辨率设置是否合理。...UE pipeline UV贴图准备就绪,下面就是如何生成LM内容了。这部分我没法调试,只能看代码,所以不太确定理解的是否准确,很多逻辑都是自圆其说,我承认有赌的成分。...另外,还涉及到阴影图等内容,很多谜团需要一点点的解惑。 总结 LightMap是我今年才了解的一个概念,最初是在Unity的SRP中介绍光照贴图的内容,看完之后一脸懵。...后来,看到BabylonJS,以及threejs也支持,突然觉得这个看上去好像很重要的样子。

    1.3K30

    【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上)

    二.基本思路 简易片头动画的实现思路如下,除了正常的舞台元素外,需要背景音乐,使用THREE.AudioLoader就可以从后后台加载音乐,舞台中主要的实体元素是MARVEL这几个字母的立体模型,可以使用...几个字母逐渐翻转过来,这个效果的实现方式很多,可以调整相机参数,也可以调整物体参数,建议自己动手时各种方法都尝试一下。...如果使用THREE.js提供的Geometry基本不会遇到什么问题,例如上图中的示例,就将视频素材贴在了立方体的各个面上,然而当你使用其他带有一些自定义性质的几何体实例,比如自己画了一个shape然后拉伸成为拉伸体...这就引出了本节中的关键概念——UV映射矩阵。 大部分高大上的概念都离不开一个土掉渣的实现,UV映射矩阵也不例外。...为了保证贴图素材的方向,它们之间就有存在一个对应关系,否则最后渲染的纹理可能就是倒着的或者旋转90°的图像,所以UV映射矩阵中存储的依然是上例中右图的三个点,但默认索引和构成几何体指定面的三个顶点的索引相对应

    3.1K51

    一个全能的挖孔 Shader

    TouchBlocker 是用来限制可点击的节点的独立组件,完整文件在 eazax-ccc/component 目录下。 ? 让你点啥就点啥 ☆ 实现上面的新手引导需要的核心代码还不到 15 行,嗐!...代码实现 注:本 Shader 基于 Cocos Creator 2.3.3 开发 重要提醒:使用自定义 Shader 需要禁用动态合图功能,否则在运行的时候会出现渲染单色图片 Shader 失效的情况...// 禁用动态合图 cc.dynamicAtlasManager.enabled = false; 由于我对 Shader 编写还不是很熟悉,主函数中使用了很多 if else 判断,我也在尝试优化中,...另外我还提供了矩形和圆形的独立版本 Shader ,独立版本需要自行设置 Material 才能使用,同时不适用于 HollowOut 组件,当然可以自行实现。...独立版本 使用方法 1. 在带有 Sprite 组件的节点上添加 HollowOut 组件。 2.

    2.8K20

    2D+1D | vivo官网Web 3D应用开发与实战

    2D数据可视化是指利用二维平面图表对数据进行组织处理、呈现的一种方式。讲到图表,大家首先想到的可能是我们日常用过柱状图,折线图等展示形式的图表图形。...比如下面这种: 其实除了上面几种形式,还有一些比较炫酷的图表展示形式如:气泡图、面积图、省份地图、词云、瀑布图、漏斗图、热力图、GIS地图等。...但是在做手机模型的3D渲染时,对于光照和阴影以及反射的侧重点比较高,并不需要碰撞检测等特性。所以,基于以上的对比,我们选取ThreeJs作为我们3D渲染的底层库去实现手机模型的3D渲染。...模型文件其实是一个包含了顶点坐标、索引(index)、UV、法线、节点关系、材质、贴图、动画等信息的数据集合。不论模型格式如何,但是其本质就是对上述信息的编排和组织。...2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大 3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好 4.2 3D

    2.1K41

    电力布局三维编辑器功能设计

    由于涉及到的台区非常多,所以客户希望开发的不是单个项目,而是可以实现项目的3D编辑器,使得电网的台区经理使用编辑器编辑出所负责的变压器台区的设备关系场景及数据状态展示。...下面先上几张三维可视化的图瞅瞅: 图片 图片 图片 客户需要的是一个布局工具,而不是直接的三维场景,这比直接搭建一个三维的场景要难许多。 但是所谓万事开头难,难在不开头。...其中由于webgl的line宽度只能为1,影响效果,所以我们的连线使用了自己封装的Line,类似threejs的MeshLine,通过Mesh来模拟Line,可以指定line的宽度。...,可以实现二次开发的能力,二次开发实现的特效如下: 线条的流动效果 通过uv流动动画+特定的贴图,可以实现线条的流动效果,比如demo效果如下: 有关uv流动动画的原理,可以参考笔者之前的文章...台区、电能表模型轮廓发光的呼吸灯闪烁效果 通过引擎的OutlineRenderer,可以实现模型的轮廓效果,并且通过OutlineRenderer的参数的不断修改,便可以实现呼吸灯的闪烁的效果,代码如下所示

    48520

    DBeaver:强大实用的跨平台数据库工具 | 开源日报 No.71

    主要特点包括元数据编辑器、SQL 编辑器、富文本数据编辑器以及 ER 图等。...-3-Clause GoogleTest 是谷歌的 C++ 测试框架,它合并了之前独立存在的 GoogleTest 和 GoogleMock 项目。...pmndrs/react-three-fiber[3] Stars: 24.2k License: MIT picture react-three-fiber 是一个用于 threejs 的 React...没有限制,所有在 Threejs 中可行的操作都可以在这里实现。 无性能损耗,在 React 之外进行组件渲染。由于 React 具备调度功能,它比 Threejs 更适合大规模应用场景。...该项目的核心优势和主要功能包括: 可以理解未分段的 MP4 格式视频 使用 Web Workers 将任务独立线程进行处理 将视频片段转换为 144p 格式 实时渲染画布元素中的帧图像 从片段生成 WebM

    63450
    领券