opengl
文章平均质量分 79
鱼儿-1226
离家千里,出了地铁口,万家灯火。
多年从事于音视频相关直播行业,使用 windows / linux系统,熟练使用c++、c#、opengl、unity3d、UE、cocos、ffmpeg、directshow、obs、鼠标键盘钩子、汇编、逆向(爬虫) 等。
展开
-
OpenGL 实现大眼和瘦脸
opengl原创 2023-04-10 15:14:28 · 486 阅读 · 0 评论 -
图像处理之LUT
OpenGL lut原创 2023-03-21 10:57:28 · 2123 阅读 · 0 评论 -
Opengl ES之PBO
opengl pbo原创 2023-03-14 16:24:28 · 1063 阅读 · 0 评论 -
unity3D-射线RaycastAll
untiy转载 2023-02-24 11:20:47 · 417 阅读 · 0 评论 -
OpenGL ES EGL eglCreatePbufferSurface
EGL原创 2023-02-24 11:18:06 · 449 阅读 · 0 评论 -
OpenGL ES案例-抖音系滤镜实现
一、缩放滤镜1、效果:缩放滤镜.gif2、着色器代码这里我们的缩放采用的是在顶点着色器里面实现的,当然也可以在片源着色器中实现,并且我们也推荐在片源着色器中实现,这里我们只是为了展示在顶点着色器中也是可以做到的。1)顶点着色器attribute vec4 Position;attribute vec2 TextureCoords;varying vec2 TextureCoordsVarying;//时间戳(随着定时器的方法调用及时更新):从0开始一直递增unifo原创 2021-11-30 16:55:56 · 571 阅读 · 1 评论 -
Android OpenGL ES 高斯模糊与毛玻璃效果
一、均值模糊所谓模糊,就是让图像看不清,那么让图片看不清有哪些方法呢 缩小图片 缩小图片比较好理解,当我们将原本1080*960的图片,按照比例缩小为540*480,即缩小为原来的二分之一,但显示的时候,我们还是让他以1080*960大小显示,此时图片看起来就比原来的模糊 像素取周边像素的平均值 当某张人像的图片非常看不清楚时,我们可能会说,这张照片的人眼睛鼻子糊成一块都看不清了,其实也就是像素与像素之间变得平滑,而不是高清图的那种轮廓分明 下面,我们正在在做图片模糊处...转载 2021-11-30 16:54:09 · 1811 阅读 · 0 评论 -
GLSL shader 磨砂玻璃效果
CCProgram vs %{precision highp float;#include <cc-global>in vec3 a_position;in vec2 a_uv0;in vec4 a_color;out vec2 v_uv0;out vec4 v_color;void main () {gl_Position = cc_matViewProj * vec4(a_position, 1);v_uv0 = a_uv0;v_color...原创 2021-11-24 17:35:51 · 645 阅读 · 0 评论 -
OpenGL ES案例-抖音系滤镜实现
这篇文章我们继续研究滤镜实现,主要实现的滤镜大家应该在抖音系中有见到过,ok,话不多说,直接开始吧!一、缩放滤镜1、效果:缩放滤镜.gif2、着色器代码这里我们的缩放采用的是在顶点着色器里面实现的,当然也可以在片源着色器中实现,并且我们也推荐在片源着色器中实现,这里我们只是为了展示在顶点着色器中也是可以做到的。1)顶点着色器attribute vec4 Position;attribute vec2 TextureCoords;varying vec2 T.转载 2021-11-16 18:54:50 · 572 阅读 · 0 评论 -
OpenGL 数据处理(上)
在OpenGL中,大量的数据在着色器中传递,数据通过Buffer和Texture两种形式组织。1 缓存(Buffer)OpenGL中Buffer为一段连续的内存空间,用names标识,在使用buffer时首先调用函数保存某个GLuint类型的name,将其绑定到GL的上下文,然后再为它分配内存空间,最后输入数据。1.1 缓存生成以及内存空间分配将缓存绑定至GL上下文时,需根据不同的缓存使用场景时指定缓存绑定目标。分配内存的GL函数如下;void glBufferData(GLen.原创 2021-03-11 14:54:49 · 1002 阅读 · 0 评论 -
OpenGL ES VAO、VBO、EBO、FBO、PBO、TBO、UBO
VBO 和 EBOVBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VAO 和 EBO 实际上是对同一类 Buffer 按照用途的不同称呼。OpenGL ES 2.0 编程中,用于绘制的顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存。但是很多时候我们没必要每次绘制的时候都去进行内转载 2021-02-23 10:40:10 · 1078 阅读 · 0 评论 -
OpenGL Shader 自动瘦脸与眼睛放大
图像局部扭曲算法有三个:局部缩放(Local Scaling)算法、局部平移(Local Transition)算法和局部旋转(Local Rotation)算法。其中应用局部缩放算法可实现眼睛放大,局部平移算法则可用于实现瘦脸效果。 precision highp float; varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture; uniform highp float scaleRatio;.原创 2021-01-12 11:03:40 · 780 阅读 · 0 评论 -
RGB颜色空间转换HSV颜色空间 RGB2HSV算法
这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零):讲解:——————————————action————————————————直接看这段代码很有可能会不知所云。首先要理解HSV颜色空间与RGB颜色空间的转换原理。查找相关资料后并不难理解。这里贴出一张最终计算公式。上述代码就是围绕这个计算公式进行的。1.首先计算出RGB的最大和最小通道值2.计算delta差值3.直接计算S V通道值4.首先根据下面公式直...原创 2020-12-08 10:22:00 · 5130 阅读 · 1 评论 -
opengl 顶点坐标系 和 纹理坐标系 起点 和 映射关系
顶点坐标系 的 起点是 左下点(-1, -1),接下来是(1,-1) , (-1, 1) , (1 , 1) 是一个反Z形状纹理坐标系 的起点是 左下点 (0, 0),接下来是 (1 , 0) , (0, 1 ), (1, 1)是一个反Z形状...原创 2020-12-03 20:49:33 · 1246 阅读 · 0 评论 -
NDK OpenGL ES 3.0 开发(十九):相机抖音滤镜
OpenGLES 相机抖音滤镜最近几篇文章主要是利用 OpenGL 实现相机预览的一些常见的滤镜,上一篇主要介绍了 LUT 滤镜的原理及简单实现方法,而本文主要介绍抖音短视频 App 里面一些常见滤镜的实现,这里只做抛砖引玉,玩滤镜主要靠想象力去实现一些酷炫的效果。分色偏移分色偏移分色偏移滤镜原理:基于原纹理坐标进行偏移,分别采样后再按照 RGBA 通道进行混合,组成一个新的颜色。//分色偏移#version 100precision highp float;varying转载 2020-10-23 10:52:00 · 393 阅读 · 0 评论 -
NDK OpenGL ES 3.0 开发(七):Transform Feedback
什么是 Transform FeedbackTransform Feedback(变换反馈)是在 OpenGLES3.0 渲染管线中,顶点处理阶段结束之后,图元装配和光栅化之前的一个步骤。 Transform Feedback 可以重新捕获即将装配为图元(点,线段,三角形)的顶点,然后你将它们的部分或者全部属性传递到缓存对象。Transform Feedback 的主要作用是可以将顶点着色器的处理结果输出,并且可以有多个输出,这样可以将大量的向量或矩阵运算交给 GPU 并行处理,这是 OpenGLE原创 2020-10-19 14:52:47 · 385 阅读 · 0 评论 -
OpenGL ES 实现瘦身大长腿效果
首先这可能是一个送命题,小姐姐需要瘦身大长腿效果吗?恩,小姐姐自带瘦身大长腿。cover.gif实现原理OpenGL ES 实现瘦身和大长腿效果比较方便,使用纹理映射技术借助于 OpenGL 的图像双线性插值算法可以轻易实现图像的伸缩效果。回顾下前面讲的,什么是纹理?在 OpenGL 中,纹理实际上是一个可以被采样的复杂数据集合,是 GPU 使用的图像数据结构,纹理分为 2D 纹理、 立方图纹理和 3D 纹理。2D 纹理是 OpenGLES 中最常用和最常见的纹理形式,是一个图像数据的二原创 2020-10-19 14:49:28 · 610 阅读 · 0 评论 -
OpenGL ES 常见滤镜处理
图片滤镜实现思路前提条件:能够用GLSL显示普通图片思路初始化(上下文,顶点数组,顶点数据,顶点缓存区,CAEAGLayer,绑定渲染缓存区/帧缓存区,获取图片路径并将图片->纹理,设置视口,link默认着色器)创建CADisplayLink刷新图片图片缩放滤镜实现思路缩放滤镜实际上基本的原理:可以通过修改顶点坐标和纹理坐标的对应关系来实现缩放滤镜.vsh//顶点坐标attribute vec4Position;//纹理坐标attribute vec...原创 2020-10-16 16:59:36 · 672 阅读 · 0 评论 -
OpenGL入门(一) glfw ,glew,glut,freeglut区别
glfw:GLFW is a free, Open Source, multi-platform library for opening a window, creating an OpenGL context and managing input. It is easy to integrate into existing applications and does not lay claim to the main loop. GLFW is written in C and has native...原创 2020-09-02 10:03:44 · 768 阅读 · 0 评论 -
OpenGL中如何将某个texture拷贝到另外一个texture
参考stackoverflow,可行的方法为一、使用glCopyImageSubData,这个方法最直观而且简单。不过需要 OpenGL 4.3二、为目标texture创建FBO。使用shader,采用texture2D把源texture画到目标texture三、为源texture创建FBO。使用glCopyTexSubImage2D从framebuffer拷贝到目标纹理 fboId = srcTex->GetFrameBufferId(); glBindFramebu.转载 2020-08-28 15:48:58 · 1266 阅读 · 0 评论 -
OpenGL拷贝纹理的两种方式
一种是直观的使用glGetTexImage,然后获取数据到内存再贴上去,这种方法很慢另一种是使用FBO,将纹理附加到FBO,然后用glCopyTexSubImage2D,不涉及跟内存交换数据,速度飞快。方法一:获取纹理再拷贝 unsigned char * data = new unsigned char[normal_texture.width*normal_texture.Hight*4]; glBindTexture(GL_TEXTURE_2D,src_id); .原创 2020-08-28 10:21:46 · 3091 阅读 · 0 评论 -
现代OpenGL教程 01 - 入门指南
以下是我学习opengl得到的启示最多的一篇文章,我强烈地建议大家去读一下这位大神的相关系列的文章!还有https://github.com/tomdalling/opengl-series。这里面的代码包含全面,真正想学习opengl的可以去看看!而且比我写的代码精致得多!译序早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API。后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起混用着。现在工作内容是手机游戏,又转到Open原创 2020-08-25 17:54:04 · 1059 阅读 · 0 评论 -
视觉SLAM中的李群&李代数基础
前言在做SLAM研究的时候,会涉及到对旋转矩阵求导的问题。这时候需要使用矩阵李群的知识,将旋转或者变换等矩阵李群形式,映射到李代数上求解。本文主要涉及两个特殊矩阵李群:特殊正交群(special orthogonal group)SO(3),表示旋转;特殊欧几里得群(special Euclidean group)SE(3),表示位姿。1 群的定义群(Group)是一个集合加上一种运算所构成的代数结构。该运算将两个元素a和b组成另外一个元素,记为a·b或者ab。记集合为G,运算为· ,则当.原创 2020-08-19 10:49:00 · 866 阅读 · 0 评论 -
增强现实中的光学透射式头盔显示器的标定初步
2016年被称为虚拟现实技术元年,然而我们要说的是与之同时发展的增强现实技术(Augmented Reality)。增强现实与虚拟现实有着显著的不同。虚拟现实是通过计算机图形技术、三维跟踪技术和各种显示技术等为用户构建完全虚拟的沉浸式环境;而增强现实是在现实环境的基础上叠加虚拟的信息,这些虚拟信息也就是为了“增强”现实环境而人为加上去的。简单来说,虚拟现实全是虚拟的,增强现实既有虚拟又有真实。 本文旨在介绍增强现实技术和应用,重点是分享笔者在学习和工作中遇到的一些问题和总结的一些经验,所以在介...原创 2020-08-19 10:48:19 · 1172 阅读 · 0 评论 -
通过openGL纹理在Unity中获取摄像机图像
主要代码如下 :IEnumerator Start() { Image_left = new Texture2D(m_videoWidth, m_videoHeight, TextureFormat.ARGB32, false); //在Unity中创建2D纹理 Image_left.filterMode = FilterMode.Point; ...原创 2020-08-19 10:43:21 · 866 阅读 · 0 评论 -
[OpenGL]未来视觉5-滤镜
1.灵魂出窍效果说明,上一帧的透明度不断减少,叠加在现在这帧的上面,并有放大扩散效果。soulout.gifvoid MagicSoulOutFilter::onDrawArraysPre() { //存在两个图层,开启颜色混合 glEnable(GL_BLEND); //透明度混合 // 表示源颜色乘以自身的alpha 值,目标颜色乘目标颜色值混合,如果不开启,直接被目标的画面覆盖 glBlendFunc(GL_SRC_ALPHA,GL..原创 2020-08-13 14:25:44 · 415 阅读 · 0 评论 -
GLSL常用内建函数
1. dot 点乘 返回两个单位向量之间夹角的cos值2. cross 叉乘3. texture2D 用于纹理采样4. normalize :对⼀一个向量量规格化5. clamp 将⼀个向量固定在一个最小值和最大值之间以下内建函数对矢量标量同样有效6. pow()幂函数7. exp() log() 指数函数 对数函数8. sqrt() 平方根9. max() min()最大值 最小值10. ceil() floor(),取大于实参的最小整数,取小于实参的最大整数1原创 2020-08-12 10:33:18 · 1540 阅读 · 0 评论 -
OpenGL获取支持的顶点属性个数
GLint nrVertexAttrib;glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrVertexAttrib);cout << "从系统支持的顶点属性最大为:" << nrVertexAttrib << endl;原创 2020-08-12 10:28:09 · 386 阅读 · 0 评论 -
OpenGL ES:YUV转RGB
色彩的二次抽样在RGB颜色模式下,每个像素点由Red、Green、Blue三种颜色组合而成,YUV使用色彩通道UV和亮度通道Y,这种格式更适合图像处理领域,图片的所有细节保存在亮度通道中,如果没有亮度,图片就是一张灰度图片,人的眼睛对亮度的敏感度要高于颜色,所以可以通过减少每个像素点的颜色值,达到效果比较好的压缩,这个减少颜色数据的过程就是色彩的二次抽样YUV转RGB绘制纹理纹理映射只能在RGBA方式下执行,摄像头采集YUV,需要把YUV转换成RGBA获取到视频帧的YUV数据Core原创 2020-08-12 10:23:55 · 2211 阅读 · 1 评论 -
openGL ES美颜滤镜之美白,磨皮,红润
下面是滤镜源码:import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.opengl.GLES20;import android.opengl.GLSurfaceView;import android.opengl.Matrix;import android.view.WindowManager;import com.ws.gl.o转载 2020-08-11 10:26:26 · 824 阅读 · 0 评论 -
OpenGL---PBO
PBO(Pixel Buffer Object),将像素数据存储在显存中。优点:1、快速的像素数据传递,它采用了一种叫DMA(Direct Memory Access)的技术,无需CPU介入2、 高效并不在于传输更快,而在于与硬件相关的异步调用方式,调用之后CPU即返回执行其它操作(使用DMA方式的传输、由OpenGL直接控制)3、在单个PBO情况下并不能得到很好的效果,毕竟传输过程仍然存在(但速度可能变快,比如显存内部的数据传输),但其异步性就提供了双PBO实现的可能性,用双PBO来.原创 2020-08-11 10:24:42 · 878 阅读 · 0 评论 -
OpenGL VBO, PBO与FBO
VBO,Vertex Buffer Array 为了加快显示速度,显卡增加了一个扩展,即VBO。它本质上是存储几何数据的缓存。它直接把顶点数据放置到显卡中的高速缓存,极大提高了绘制速度。 这个扩展用到ARB_vertex_buffer_object,它可以直接像顶点数组那样使用。唯一不同的地方在于它需要将数据载入显卡的高效缓存,因此需要占用渲染时间。 [参考文章1] 给出了一个使用VBO扩展的例子程序。[参考文章2]罗列了与VBO操作相关的函数[参考文章3]归纳出VBO...原创 2020-08-11 10:24:09 · 729 阅读 · 0 评论 -
opengl从固定渲染管线到可编程渲染管线
流水线概述下图描述了一个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。一个固定流水线包括如下功能:顶点变换(Vertex Transformation)这里一个顶点是一个信息集合,包括空间中的位置、顶点的颜色、法线、纹理坐标等。这一阶段的输入是独立的顶点信息,固定功能流水线在这一阶段通常进行如下工作:·顶点位置变换·为每个顶点计算光照·纹理坐标的生成与变换图元组合和光栅化(Primitive Assembly原创 2020-08-11 10:23:31 · 816 阅读 · 0 评论 -
GPU编程示例一 Render to Vertexbuffer in OpenGL
概貌:PBO: Pixel buffer objectFBO: Frame buffer objectVBO: Vertex buffer object以下介绍两种不同的实现方法,随着显卡的不断发展,可能会有更好的解决方法,但以下两种方法是目前比较常用的。方法 1: 在顶点着色其间读取纹理,也就是(Vertex Texture Fetch).可以看一下以下论文:http://developer.nvidia.com/object/using_vertex_textures.ht.原创 2020-08-11 10:22:58 · 382 阅读 · 0 评论 -
opengl使用FBO离屏渲染图片
#include <gl\glew.h> #include <gl\freeglut.h> #include <stdlib.h> #include <stdio.h> #pragma comment(lib, "glew32.lib") GLuint imageFBO; GLuint imageID; GLuint depthTextureID; void Set...原创 2020-08-10 11:28:34 · 737 阅读 · 0 评论 -
关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算
gl_FragCoord和gl_FragDepth分别是片元着色器的输入和输出变量。gl_FragCoord是个vec4,四个分量分别对应x, y, z和1/w。其中,x和y是当前片元的窗口相对坐标,不过它们不是整数,小数部分恒为0.5。x - 0.5和y - 0.5分别位于[0, windowWidth - 1]和[0, windowHeight - 1]内。windowWidth和windowHeight都以像素为单位,亦即用glViewPort指定的宽高。w即为乘过了投影矩阵之后点坐标的w,用于p原创 2020-08-10 11:23:49 · 4055 阅读 · 0 评论 -
GPUImage详细解析- 实时美颜滤镜
解析(一)解析(二)GPUImageFilter就是用来接收源图像,通过自定义的顶点、片元着色器来渲染新的图像,并在绘制完成后通知响应链的下一个对象。 GPUImageFramebuffer就是用来管理纹理缓存的格式与读写帧缓存的buffer。 GPUImageVideoCamera是GPUImageOutput的子类,提供来自摄像头的图像数据作为源数据,一般是响应链的源头。 GPUImageView是响应链的终点,一般用于显示GPUImage的图像。琨君的基于GPUImage的实时美颜滤镜对G原创 2020-08-10 11:23:14 · 1402 阅读 · 0 评论 -
GPUImage详细解析(三)- 实时美颜滤镜
解析(一)解析(二)GPUImageFilter就是用来接收源图像,通过自定义的顶点、片元着色器来渲染新的图像,并在绘制完成后通知响应链的下一个对象。 GPUImageFramebuffer就是用来管理纹理缓存的格式与读写帧缓存的buffer。 GPUImageVideoCamera是GPUImageOutput的子类,提供来自摄像头的图像数据作为源数据,一般是响应链的源头。 GPUImageView是响应链的终点,一般用于显示GPUImage的图像。琨君的基于GPUImage的实时美颜滤镜对G原创 2020-08-07 10:34:28 · 696 阅读 · 0 评论 -
OpenGL深入探索——像素缓冲区对象 (PBO)
概述OpenGL ARB_pixel_buffer_object 扩展与ARB_vertex_buffer_object.很相似。为了缓冲区对象不仅能存储顶点数据,还能存储像素数据,它简单地扩展了 ARB_vertex_buffer_object extension。储存像素数据的缓冲区对象称为Pixel Buffer Object (PBO)。ARB_pixel_buffer_object extension借鉴了VBO所有的框架和API,而且还多了两个"Target" 标签。这俩Target协助P原创 2020-08-06 10:21:07 · 1240 阅读 · 0 评论 -
OpenGL缓冲区对象之FBO
1. 概述在OpenGL渲染管线中几何数据和纹理经过变换和一些测试处理,最终会被展示到屏幕上。OpenGL渲染管线的最终位置是在帧缓冲区中。帧缓冲区是一系列二维的像素存储数组,包括了颜色缓冲区、深度缓冲区、模板缓冲区以及累积缓冲区。默认情况下OpenGL使用的是窗口系统提供的帧缓冲区。OpenGL的GL_ARB_framebuffer_object这个扩展提供了一种方式来创建额外的帧缓冲区对象(FBO)。使用帧缓冲区对象,OpenGL可以将原先绘制到窗口提供的帧缓冲区重定向到FBO之中。和窗口提原创 2020-08-06 10:20:12 · 1037 阅读 · 0 评论