
OpenGL
文章平均质量分 81
闲暇部落
OpenGL、音视频、Linux、Android、Studio、Kotlin,Java,Git,Unity,面试
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenGL ES详解——多个纹理实现混叠显示
【代码】OpenGL ES详解——多个纹理实现混叠显示。原创 2024-12-11 19:33:52 · 644 阅读 · 0 评论 -
OpenGL ES详解——glUniform1i方法是否能用于设置纹理单元
需要注意的是,OpenGL允许你同时绑定多个纹理到不同的纹理单元上,并在着色器中通过不同的sampler uniform变量来选择它们。在OpenGL中,纹理单元是图形硬件的一部分,它允许你同时绑定多个纹理,并在着色器程序中通过uniform变量来选择使用哪个纹理。通常,纹理单元通过整数索引来访问,这些索引在着色器中以sampler2D(或其他类型的采样器)uniform变量的形式出现。然后,你需要确保在绑定纹理到纹理单元时,使用与你在着色器中设置的索引相匹配的纹理单元。现在,当你在着色器中访问。原创 2024-12-11 19:06:48 · 564 阅读 · 0 评论 -
OpenGL ES详解——glTexImage2D作用
glTexImage2D是OpenGL中的一个重要函数,其作用是为2D纹理分配显存并上传数据。原创 2024-12-11 09:37:58 · 944 阅读 · 0 评论 -
Camera2 API——CameraCaptureSession
CameraDevice的已配置捕获会话,用于从相机捕获图像或重新处理之前在同一会话中从相机捕获的图像。原创 2024-12-10 07:34:56 · 458 阅读 · 0 评论 -
OpenGL ES详解——Camera2数据渲染
二、获取Camera2数据。三、渲染Camera2数据。一、Camera2介绍。原创 2024-12-10 07:08:14 · 173 阅读 · 0 评论 -
OpenGL ES详解——YUV数据渲染
YUV是一种图像颜色编码方式。在说 yuv 之前,就不得不说 RGB 图像空间,顾名思义,RGB 是值图像的每一个像素都有 R、G,B 三个值,且三个值一次排列存储;但不一定说一定是按照 R,G,B 顺序排列,也可以是 B,G,R 这样的顺序。其中 R,G,B 的位深为 8 bit。我们常见的图片处理,都是用 R,G,B 的图像格式,比如bitmap,比如图像的存储,基本使用 R,G,B。原创 2024-12-09 16:59:00 · 1871 阅读 · 0 评论 -
OpenGL ES详解——文字渲染
FreeType的这些度量值中包含了字形在相对于基线上的偏移量用来描述字形相对于此基线的位置,字形的大小,以及与下一个字符之间的距离。当你想要使用不同的字体时,你不得不重新生成位图字体,以及你的程序会被限制在一个固定的分辨率:如果你对这些文字进行放大的话你会看到文字的像素边缘。然而,你的应用程序可能并不需要这么强大的功能,性能更好的点阵字体也许是更可取的。通常这并不会出现什么问题,因为通常的纹理都有4或者4的整数倍的储存大小,但是现在我们只用一位来表示每一个像素颜色,此时的纹理可能有任意内存长度。原创 2024-12-04 17:01:31 · 1872 阅读 · 0 评论 -
Android opengl 绘制矩形,宽高相同,不能显示为正方形,是怎么回事
通过上述检查和调整,你应该能够找到导致矩形不能显示为正方形的原因,并进行相应的修正。如果问题依旧存在,可能需要更详细地检查OpenGL的渲染管道和具体的代码实现。在Android上使用OpenGL绘制矩形(或尝试显示为正方形)时,如果结果显示为不是正方形,可能有几个原因。原创 2024-11-29 19:23:53 · 559 阅读 · 0 评论 -
Android shader glsl math方法有哪些举例
在Android的Shader编程中,GLSL(OpenGL Shading Language)被用于实现各种图形效果。GLSL提供了一系列数学方法,这些方法可以在顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)中使用,以实现复杂的图形变换和效果。原创 2024-11-29 18:52:42 · 732 阅读 · 0 评论 -
android shader gl_Position是几个分量
在Android的OpenGL ES中是一个四维向量,包含x、y、z和w四个分量。这些分量共同决定了顶点的位置和投影效果。是顶点着色器(Vertex Shader)的一个内置输出变量,它用于指定顶点在裁剪空间(Clip Space)中的位置。是一个四维向量(4-component vector),包含四个分量:x、y、z和w。这四个分量共同定义了顶点的位置和相对于观察者的深度(或距离)。的值会被用来确定顶点是否位于裁剪空间内,以及它应该如何被投影到屏幕上。在Android的OpenGL ES中,原创 2024-11-29 17:39:02 · 475 阅读 · 0 评论 -
GL_TRIANGLE_FAN,GL_TRIANGLE_STRIP和GL_TRIANGLES的区别是什么
独立性:GL_TRIANGLES绘制的三角形是独立的,不共享顶点;而GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN绘制的三角形是相连的,可以共享顶点。顶点使用方式:GL_TRIANGLES按每三个顶点一组使用;GL_TRIANGLE_STRIP根据顶点的奇偶性决定三角形的顶点组合;GL_TRIANGLE_FAN则是以一个顶点为中心,与其他顶点组合形成三角形。适用场景:根据具体需求选择合适的绘制方式,可以在满足需求的情况下提高性能。原创 2024-11-28 11:55:26 · 1025 阅读 · 0 评论 -
Android OpenGL ES详解——绘制圆角矩形
绘制矩形绘制圆形绘制圆角矩形原创 2024-11-22 22:19:09 · 614 阅读 · 0 评论 -
Android OpenGL ES详解——光照基础
现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是以目前我们所拥有的处理能力无法模拟的。因此OpenGL的光照仅仅使用了简化的模型并基于对现实的估计来进行模拟,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。原创 2024-11-21 10:27:05 · 370 阅读 · 0 评论 -
Android OpenGL ES详解——光栅化
显然我们需要的是距离我们屏幕最近的三角形的点。就三角形边缘不规则的情况来说,因为三角形的边上是无限多个点,而用有限个方块去逼近无限多个点的三角形的边,所以当然会产生不规则的锯齿,硬件的解决办法一是可以加大屏幕的分辨率,使得像素变小,从而可以得到更多个有限的方块去逼近三角形。如上图,首先把屏幕上所有的像素点的深度都设置为无穷大,然后先绘制一个所有深度都为5、颜色为红色的三角形,因为5比无穷大小,所以,把三角形中所有的像素点都绘制到屏幕上,颜色为红色,深度更新为5,之后,又有一个紫色的三角形。原创 2024-11-19 20:21:46 · 1645 阅读 · 0 评论 -
Android OpenGL ES详解——Renderer接口介绍
加载和绘制对象:使用OpenGL的API加载和渲染3D对象,可以通过顶点缓冲区(Vertex Buffer Objects)加载顶点数据、纹理缓冲区(Texture Buffer Objects)加载纹理数据等。处理用户输入:通过重写GLSurfaceView的onTouchEvent方法,处理用户的触摸、手势等输入事件,例如旋转、平移、缩放等操作。除了基本的绘制操作,OpenGL还提供了丰富的特性和扩展功能,例如光照、阴影、粒子效果、后期处理等,可以根据需求进行扩展和优化。原创 2024-11-19 19:04:29 · 796 阅读 · 0 评论 -
Android OpenGL ES详解——颜色
在前面的教程中我们已经简要提到过该如何在OpenGL中使用颜色(Color),但是我们至今所接触到的都是很浅层的知识。本节我们将会更广泛地讨论颜色,并且还会为接下来的光照(Lighting)教程创建一个场景。现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们要做的工作是使用(有限的)数字来模拟真实世界中(无限)的颜色,因此并不是所有的现实世界中的颜色都可以用数字来表示。然而我们依然可以用数字来代表许多种颜色,并且你甚至可能根本感觉不到他们与真实颜色之间的差异。原创 2024-11-18 18:03:33 · 988 阅读 · 0 评论 -
Android OpenGL ES详解——多重采样抗锯齿(MSAA)
可以直接把一个多采样纹理图像传递到着色器中,以取代必须先还原的方式。GLSL给我们一个选项来为每个子样本进行纹理图像采样,所以我们可以创建自己的抗锯齿算法,在比较大的图形应用中,通常这么做。我们不会深究自定义抗锯齿技术的创建细节,但是会给你自己去实现它提供一些提示。在OpenGL中,多重采样抗锯齿(MSAA)是一种技术,用于降低渲染图形时出现的锯齿现象,也称为走样。当启用多重采样抗锯齿时,渲染的图像会使用多个采样点来计算每个像素的颜色值,从而减少锯齿现象。原创 2024-11-18 17:40:06 · 1560 阅读 · 3 评论 -
Android OpenGL ES详解——实例化
就像你所看到的,在合适的条件下,实例渲染对于你的显卡来说和普通渲染有很大不同。处于这个理由,实例渲染通常用来渲染草、草丛、粒子以及像这样的场景,基本上来讲只要场景中有很多重复物体,使用实例渲染都会获得好处。参考文章。原创 2024-11-15 09:36:02 · 1440 阅读 · 0 评论 -
Android OpenGL ES详解——版本3.0和2.0 的异同点和新功能
详见:OpenGL ES 3.0 对比 OpenGL ES 2.0 的异同点和新功能_opengl es2.0和3.0-优快云博客转载 2024-11-14 20:59:38 · 166 阅读 · 0 评论 -
Android OpenGL ES详解——几何着色器
而如果我们利用GS,我们只需要在一开始将这些广告牌的中心点传递给GPU,因为这些中心点位置是不会随着Camera变的,因此可以放在default heap中从而提升性能,并且由于此时一个广告牌只对应一个顶点信息,也减少了内存的占用。例如四个顶点的triangle strip构成两个三角形,会调用两次GS,第一次按顺序传入下标为0,1,2的三个顶点,第二次按顺序传入下标为1,3,2的三个顶点(strip里第偶数位三角形的后两个顶点会自动对调)。这次我们会创建一个使用模型提供的顶点法线,而不是自己去生成。原创 2024-11-14 18:39:13 · 1827 阅读 · 0 评论 -
Android OpenGL ES详解——高级GLSL
讲解一些内建变量(Built-in Variable)、组织着色器输入和输出的新方式以及一个叫做uniform缓冲对象(Uniform Buffer Object)的非常有用的工具。原创 2024-11-14 10:10:15 · 1125 阅读 · 0 评论 -
OpenGL ES详解——glBufferData、glBufferSubData、glMapBuffer、glVertexAttribPointer方法、glTexImage2D介绍
使用函数填充缓冲对象管理的内存,这个函数分配了一块内存空间,然后把数据存入其中。如果我们向它的data这个参数传递的是NULL,那么OpenGL只会帮我们分配内存,而不会填充它。如果我们先打算开辟一些内存,稍后回到这个缓冲一点一点的填充数据,有些时候会很有用。原创 2024-11-13 20:51:11 · 940 阅读 · 0 评论 -
Android OpenGL ES详解——glTexImage2D方法
glTexImage2D函数的主要功能是根据指定的参数生成一个2D纹理。这包括为纹理分配显存空间,并从内存向显存拷贝数据(如果提供了pixels参数)。这个函数是纹理贴图过程中的关键步骤之一,它定义了纹理的尺寸、格式和颜色数据。原创 2024-11-13 13:16:29 · 1510 阅读 · 0 评论 -
Android OpenGL ES详解——立方体贴图
当一个立方体的中心位于原点(0,0,0)的时候,它的每一个位置向量也就是以原点为起点的方向向量。方向向量触碰到立方体表面的一点也就是立方体贴图的纹理位置,这意味着只要立方体的中心位于原点上,我们就可以使用立方体的位置向量来对立方体贴图进行采样。天空盒(Skybox)是一个包裹整个场景的立方体,它由6个图像构成一个环绕的环境,给玩家一种他所在的场景比实际的要大得多的幻觉。凡是是一个物体(或物体的某部分)反射(Reflect)他周围的环境的属性,比如物体的颜色多少有些等于它周围的环境,这要基于观察者的角度。原创 2024-11-13 13:13:18 · 1374 阅读 · 0 评论 -
Android OpenGL ES详解——纹理
我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。艺术家和程序员更喜欢使用。是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。原创 2024-11-09 17:06:15 · 1091 阅读 · 0 评论 -
android openGL中模板测试、深度测试功能的先后顺序
android openGL中模板测试、深度测试功能的先后顺序原创 2024-11-04 17:40:56 · 553 阅读 · 0 评论 -
Android OpenGL ES详解——模板Stencil
模板测试就是通过模板缓冲中记录的模板信息实现的,具体来说就是渲染管线在模板缓冲区中为每个位置的片元保存了一个“模板值”,当像素需要进行模板测试时,将设定的模板参考值与该片元对应位置的模板值进行比较,符合条件的片元通过测试,不符合条件的则被丢弃,不进行渲染;这样我们就能将这些模板值设置为我们链接的,然后在模板测试时根据这个模板值,我们就可以决定丢弃或保留它了。这个过程将每个物体的片段模板缓冲设置为1,当我们绘制边框的时候,我们基本上绘制的是放大版本的物体的通过测试的地方,放大的版本绘制后物体就会有一个边。原创 2024-10-31 16:57:40 · 1128 阅读 · 0 评论 -
Android OpenGL ES详解——裁剪Scissor
启⽤剪裁测试之后,不在此矩形区域内的片元被丢弃,只有在此矩形区域内的片元才有可能进入帧缓冲。剪裁测试可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域,启用剪裁测试后,绘制将不会在整个屏幕(帧缓冲)中进行,而是仅在指定的矩形区域中进行;只有绘制在视口区域中的图形才能被显示,如果图形有一部分超出了视口区域,那么那⼀部分是看不到的。裁剪是OpenGL中提⾼渲染的⼀种方式,只刷新屏幕上发生变化的部分,OpenGL 允许将要进⾏渲染的窗⼝中指定⼀个裁剪框。原创 2024-10-31 10:31:41 · 881 阅读 · 0 评论 -
android OpenGL ES详解——双缓冲区、默认缓冲区和帧缓冲区
在Android OpenGL中,双缓冲、默认缓冲和自定义帧缓冲(Frame Buffer Object,FBO)是图形渲染中的重要概念,它们各自承担着不同的角色和功能,同时又相互关联。双缓冲双缓冲是图形渲染中的一种常用技术,它使用两个缓冲区来存储图像数据。在OpenGL窗口中,通常有一个前缓冲(Front Buffer)和一个后缓冲(Back Buffer)。前缓冲是用户当前看到的图像,而后缓冲则是下一帧将要显示的图像。当一帧图像渲染完成后,后缓冲和前缓冲会进行交换,这样用户就能看到新的图像。原创 2024-10-30 16:34:17 · 1906 阅读 · 0 评论 -
android openGL ES详解——缓冲区VBO/VAO/EBO/FBO/RBO/离屏渲染
VBO: 存储大量顶点,因而可以利用VBO一次性发送大量数据到显卡VAO: 配置并告诉了OpenGL如何使用VBO,以及使用哪个VBOEBO/IBO:索引缓冲区里面就是存储了一系列索引,用于复用顶点缓冲区。有个问题,大家可能会想之前用6个顶点也不过18个数,使用了顶点缓冲区后变为12个,但是索引缓冲区还有6个,好像没有节省多少内存。但是实际上顶点可能包含了非常多的数据,比如我们之前用它来存颜色,它还可以存纹理等额外数据,实际应用场景一个顶点可能有非常多数据,所以复用可节省的内存是非常可观的。原创 2024-10-23 10:44:12 · 2071 阅读 · 0 评论 -
android openGL ES详解——渲染管线流程图
下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。原创 2024-10-23 10:31:20 · 476 阅读 · 0 评论 -
android openGL ES详解——混合
在这个教程前,我们一直把这个元素设置为1.0,这样物体的透明度就是0.0,同样的,当alpha值是0.0时就表示物体是完全透明的,alpha值为0.5时表示物体的颜色由50%的自身的颜色和50%的后面的颜色组成。这样就行了,但是由于我们使用的是透明值,纹理图片的上部获得了它的透明值是与底边的纯色值进行插值的。这在绘制不透明的物体时非常有用——不管是先绘制近的物体再绘制远的物体,还是先绘制远的物体再绘制近的物体,或者干脆以混乱的顺序进行绘制,最后的显示结果总是近的物体遮住远的物体。不要被混乱的顺序搞晕了。原创 2024-10-18 10:50:12 · 1433 阅读 · 0 评论 -
android openGL ES详解——面剔除
尝试在头脑中想象一下有一个3D立方体,你从任何一个方向去看它,最多可以同时看到多少个面。如果你的想象力不是过于丰富,你最终最多能数出来的面是3个。你可以从一个立方体的任意位置和方向上去看它,但是你永远不能看到多于3个面。所以我们为何还要去绘制那三个不会显示出来的3个面呢。如果我们可以以某种方式丢弃它们,我们会提高片段着色器超过50%的性能!原创 2024-08-27 17:23:56 · 600 阅读 · 0 评论 -
android openGL ES详解——深度缓冲区
深度缓存区是指一块专门内存区域,存储在显存中,用于存储屏幕上所绘制图形的每个像素点的深度值。深度值越大,离观察者越远。深度值越小,离观察者越近。深度缓冲区与帧缓冲区相对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确。深度,指OpenGL坐标系中,像素点的Z坐标距观察者的距离。其实就是该象素点在3d世界中距离摄象机的距离(绘制坐标),深度缓存中存储着每个象素点(绘制在屏幕上的)的深度值!深度值(Z值)越大,则离摄像机越远。原创 2024-08-26 14:20:25 · 1204 阅读 · 0 评论 -
android openGL ES详解(一)
主线程与GLSurfaceView:主线程负责的实例化、布局和生命周期管理,并通过特定方法(如queueEvent)与渲染线程进行通信。渲染线程与GLSurfaceView:渲染线程是内部维护的,专门用于执行OpenGL ES渲染命令的线程。渲染线程根据渲染器的指示,在需要时重新绘制场景。主线程与渲染线程:两者通过提供的机制(如queueEvent)进行通信,确保UI更新和渲染工作能够协调进行,避免阻塞主线程或造成渲染延迟。通过这种方式,原创 2024-04-23 17:59:21 · 2793 阅读 · 4 评论 -
OpenCV/OpenCL/OpenGL区别
OpenCV/OpenGL区别: 两者的区别就是Computer Vision和Computer Graphics这两个学科之间的区别,前者专注于从采集到的视觉图像中获取信息,是用机器来理解图像;后者是用机器绘制合适的视觉图像给人看。 OpenCV/OpenCL/OpenGL区别:OpenGL(全写Open Graphics Library)是个定义了一个...原创 2018-07-27 15:08:56 · 13713 阅读 · 0 评论