
OpenGL相关
文章平均质量分 97
Everbrilliant89
怕啥真理无穷进一寸有一寸的欢喜(VX:18566660283),Github地址:https://github.com/wangyongyao1989
展开
-
LearnOpenGL之Shader编程——生成设计
网格噪声基于距离场,这里的距离是指到一个特征点集最近的点的距离。比如说我们要写一个 4 个特征点的距离场,我们应该做什么呢?对每一个像素,计算它到最近的特征点的距离。也就是说,我们需要遍历所有 4 个特征点,计算他们到当前像素点的距离,并把最近的那个距离存下来。原创 2025-02-28 18:03:26 · 941 阅读 · 0 评论 -
LearnOpenGL之Shader编程用算法绘画
如果你曾经有用计算机绘图的经验,你就知道在这个过程中你需要画一个圆,然后一个长方形,一条线,一些三角形……直到画出你想要的图像。这个过程很像用手写一封信或一本书 —— 都是一系列的指令,需要你一件一件完成。 Shaders 也是一系列的指令,但是这些指令会对屏幕上的每个像素同时下达。也就是说,你的代码必须根据像素在屏幕上的不同位置执行不同的操作。就像活字印刷,你的程序就像一个 function(函数),输入位置信息,输出颜色信息,当它编译完之后会以相当快的速度运行。原创 2025-02-28 18:03:05 · 841 阅读 · 0 评论 -
LearnOpenGL之骨骼动画
(动画)插值就是关键帧的中间值。比如我们使用Blender制作动画,不需要设置每一帧的骨骼位置,只需要在几个关键帧中记录它们的位置,旋转,缩放等等信息。然后由程序自动计算出的中间的过渡帧就是我们的插值。通常插值可以使用曲线描述,比如我们的贝塞尔曲线。原创 2025-02-13 17:26:50 · 834 阅读 · 0 评论 -
GL C++显示相机YUV视频数据使用帧缓冲FBO后期处理,实现滤镜功能。
帧缓冲对象(Framebuffer Object, FBO)是 OpenGL 中用于管理渲染目标的核心工具。它允许你将渲染结果输出到纹理、渲染缓冲对象(Renderbuffer)或其他自定义的缓冲区,而不是默认的屏幕缓冲区。帧缓冲在图形渲染中具有重要作用。 以下是帧缓冲的主要作用和应用场景:原创 2025-01-23 20:41:18 · 1692 阅读 · 0 评论 -
LearnOpenGL之高级OpenGL(2)
当使用多于一个的着色器时,尽管大部分的uniform变量都是相同的,我们还是需要不断地设置它们,所以为什么要这么麻烦地重复设置它们呢? OpenGL为我们提供了一个叫做Uniform缓冲对象(Uniform Buffer Object)的工具,它允许我们定义一系列在多个着色器程序中相同的全局Uniform变量。当使用Uniform缓冲对象的时候,我们只需要设置相关的uniform一次。当然,我们仍需要手动设置每个着色器中不同的uniform。并且创建和配置Uniform缓冲对象会有一点繁琐原创 2025-01-21 11:08:29 · 839 阅读 · 0 评论 -
LearnOpenGL之高级OpenGL(1)
帧缓冲对象的初始化首先要创建一个帧缓冲对象,并绑定它,这些都很直观:接下来我们需要创建一个纹理图像,我们将它作为一个颜色附件附加到帧缓冲上。我们将纹理的维度设置为窗口的宽度和高度,并且不初始化它的数据:创建渲染缓冲对象:将渲染缓冲对象附加到帧缓冲的深度和模板附件上:绑定到帧缓冲区,像往常一样绘制场景以着色纹理。原创 2025-01-17 16:03:44 · 860 阅读 · 0 评论 -
OpenGL C++视频中添加图片及文字水印播放并录制
根据前置储备,该功能的实现流程:创建一个GLThread的OpenGL运行环境;YUV数据绘制到OpenGL纹理中;图片纹理创建绘制到glViewport;文字渲染绘制到glViewport;录制视频的surface并根据此切换GLContext上下文交换(swapBuffer)渲染与显示的视频数据 ;MediaCodec获取出encodeData写入MediaMuxer成为MP4文件格式的视频原创 2024-11-14 21:33:46 · 1375 阅读 · 0 评论 -
LearnOpenGL之文字渲染
FreeType是一个能够用于加载字体并将他们渲染到位图以及提供多种字体相关的操作的软件开发库。它是一个非常受欢迎的跨平台字体库,它被用于Mac OS X、Java、PlayStation主机、Linux、Android等平台。FreeType的真正吸引力在于它能够加载TrueType字体。TrueType字体不是用像素或其他不可缩放的方式来定义的,它是通过数学公式(曲线的组合)来定义的。类似于矢量图像,这些光栅化后的字体图像可以根据需要的字体高度来生成。通过使用TrueType字体,你原创 2024-11-04 18:26:36 · 1352 阅读 · 0 评论 -
LearnOpenGL之3D模型加载
将所有需要的向量储存到一个叫做Vertex的结构体中,我们可以用它来索引每个顶点属性。将纹理数据整理到一个Texture结构体中。储存了纹理的id以及它的类型,比如是漫反射贴图或者是镜面光贴图。在构造函数中,我们将所有必须的数据赋予了网格,我们在setupMesh函数中初始化缓冲,并最终使用Draw函数来绘制网格。注意我们将一个着色器传入了Draw函数中,将着色器传入网格类中可以让我们在绘制之前设置一些uniform(像是链接采样器到纹理单元)。public:/* 网格数据 */原创 2024-10-25 18:21:13 · 983 阅读 · 0 评论 -
OpenGL Texture C++ Camera Filter滤镜视频录制
OpenGL Texture C++ Camera Filter滤镜视频录制; 基于文章1/2/3的代码,结合Google开源项目grafika中的WindowSurface.java/Coregl.java/TextureMovieEncoder2.java/VideoEncoderCore.java创建出录制视频的surface并根据此切换GLContext上下文交换(swapBuffer)渲染与显示的视频数据,最终在VideoEncoderCore中通过MediaCodec获取出encodeDat原创 2024-10-19 15:29:34 · 1085 阅读 · 0 评论 -
OpenGL 自定义SurfaceView Texture C++预览Camera视频
由上GLSurfaceView源码分析可知,内部维护着一个GLThread子线程,用来保持GL的上下文GLConext一致性的操作。接下来仿造GLSurfaceView创建一个同样继承于SurfaceView的自定义类WyyGLSurfaceView。WyyGLSurfaceView是在OpenGL Texture C++ 预览Camera视频-优快云博客中GLTextureCPlusVideoPlayView进行改造的,有兴趣的可翻看我的这一篇的博客。原创 2024-10-12 16:07:01 · 1277 阅读 · 0 评论 -
OpenGL Texture C++ Camera Filter滤镜
基于OpenGL Texture纹理的强大功能,在片段着色器(Shader)中编写GLSL代码,对YUV的数据进行数据转换从而实现视频编辑软件中的相机滤镜功能。接上一篇OpenGL Texture C++ 预览Camera视频的功能实现,本篇来实现Camera滤镜效果并各种滤镜的切换。原创 2024-09-15 15:50:47 · 1273 阅读 · 0 评论 -
OpenGL Texture C++ 预览Camera视频
OpenGL是一个图形API,并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。基于Texture纹理强大的功能,本篇文章实现Android OpenGL Texture C++ 预览Camera视频流的功能。原创 2024-09-06 18:37:20 · 1510 阅读 · 0 评论 -
LearnOpenGL之光照
现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为风氏光照模型(Phong Lighting Model)。风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子原创 2024-08-16 18:52:31 · 1005 阅读 · 0 评论 -
LearnOpenGL之摄像机
当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及一个指向它上方的向量。细心的读者可能已经注意到我们实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。原创 2024-08-06 18:07:40 · 945 阅读 · 0 评论 -
LearnOpenGL之3D显示
绑定texture(纹理)——使用程序——开启深度测试—— 模型矩阵(Model Matrix)观察矩阵(View Matrix)、投影矩阵(Projection Matrix)的初始化创建并与顶点着色器中model/view/projection 的uniform进行数据交换。模型矩阵(Model Matrix)观察矩阵(View Matrix)、投影矩阵(Projection Matrix)组合矩阵传入到gl_position做对应的顶点数据的位置变换。原创 2024-08-02 18:37:38 · 1020 阅读 · 0 评论 -
LearnOpenGL之入门基础
OpenGL是一个图形API,并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。本文对LearnOpenGL知识的总结及记录。 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合: Github地址:https://github.com/wangyongyao1989/AndroidLearnOpenGL原创 2024-07-31 19:12:13 · 1033 阅读 · 0 评论