OpenGLES 3D应用开发实战
文章平均质量分 82
这里,我们将探讨如何使用OpenGL ES来构建高质量的3D应用程序。无论您是希望为移动设备创建令人惊叹的游戏,还是想要开发交互式可视化应用,本专栏都将对您有所帮助。我们将从基础概念入手,涵盖OpenGL ES各版本,直至高级技术如着色器编程、纹理管理和光照效果,帮助你掌握全面的图形学知识与技能。
bjxiaxueliang
在这里,我们聊技术,也聊生活。从移动领域到网络开发,从图形图像到AI机器学习,畅谈各领域的学习经验,探讨技术趋势;分享生活点滴,吐槽日常琐事,记录旅途见闻。品一杯清茶,享一段闲暇...!
展开
-
一文详解ETC1压缩纹理——OpenGL中ETC1纹理加载与渲染实践
ETC1(Ericsson Texture Compression)是一种有损纹理压缩技术,2005年初由爱立信研究院参与研发,目的是用于减少移动设备和嵌入式系统中纹理存储的内存占用,应用场景见于游戏、VR、AR等需要大量的纹理资源来创建高质量的视觉效果以及复杂的动画效果场景。原创 2024-08-14 18:23:19 · 186 阅读 · 0 评论 -
一文详解ETC1压缩纹理——移动平台纹理加载高性能解决方案
ETC1(Ericsson Texture Compression)是一种有损纹理压缩技术,2005年初由爱立信研究院参与研发,目的是用于减少移动设备和嵌入式系统中纹理存储的内存占用,应用场景见于游戏、VR、AR等需要大量的纹理资源来创建高质量的视觉效果以及复杂的动画效果场景。原创 2024-08-14 18:20:21 · 278 阅读 · 0 评论 -
OpenGL纹理转换谜团:纹理写入FRAMEBUFFER后的镜像现象
在OpenGL中,将一个 GL_TEXTURE_2D 纹理写入到 GL_FRAMEBUFFER ,然后从GL_FRAMEBUFFER读取为GL_TEXTURE_2D纹理后,发现GL_TEXTURE_2D纹理变为了输入纹理的镜像纹理。本文将探讨这个问题的原因,并提出解决方案原创 2024-01-02 20:24:09 · 1055 阅读 · 0 评论 -
一文详解ExternalOES与TEXTURE_2D纹理:揭秘两种纹理的使用方式、区别联系和转化方式
在实际应用中,我们通常将TEXTURE_2D和TEXTURE_EXTERNAL_OES纹理类型分开使用,并且它们互不干扰。实际上,这种情况占据了80%的使用场景。然而,有时候也会遇到一些特殊情况,需要将TEXTURE_EXTERNAL_OES纹理转化为TEXTURE_2D纹理进行视频处理。这里对此情况,一般我们可以通过一些技术手段,如离屏渲染或FrameBuffer帧缓冲区对象,将TEXTURE_EXTERNAL_OES纹理转换为TEXTURE_2D纹理,再进行后续的处理和计算。原创 2023-12-21 18:50:10 · 2753 阅读 · 0 评论 -
一文详解ExternalOES与TEXTURE_2D纹理:揭秘两种纹理的使用方式、区别与联系
在使用OpenGL ES进行图形图像开发时,我们常使用GL_TEXTURE_2D纹理类型,它提供了对标准2D图像的处理能力。这种纹理类型适用于大多数场景,可以用于展示静态贴图、渲染2D图形和进行图像处理等操作。另外,有时我们需要从Camera或外部视频源读取数据帧并进行处理。这时,我们会使用GL_TEXTURE_EXTERNAL_OES纹理类型。其专门用于对外部图像或实时视频流进行处理,可以直接从 BufferQueue 中接收的数据渲染纹理多边形,从而提供更高效的视频处理和渲染性能。原创 2024-07-05 16:36:00 · 233 阅读 · 0 评论 -
一文学会TextureID渲染到Surface
将一个GL_TEXTURE_2D类型的纹理ID写入到ImageReader生成的Surface中。具体实现是使用 EGL 提供的 eglCreateWindowSurface() 函数,将 EGLSurface 与 Surface 对象关联起来。然后就可以通过 OpenGL ES 将渲染结果绘制到 EGLSurface 中,最终渲染到Surface上。原创 2023-07-12 15:30:17 · 932 阅读 · 1 评论 -
一文详解微信视频通话、抖音视频回显实现方案
2014年曾经做过一款类似当今“抖音”的短视频软件,叫“魔力秀”。可以说和现在的抖音基本是一样的,但因为“魔力秀”出生过早,加上投资人不看好,注定无法成长为一棵参天大树,最终只发了一个版本就结束了。当时“魔力秀App”的视频回显模块是我设计实现的,所以就有了这篇文章。事过多年,将这篇文章拿出来整理,因为这项技术依然不过时,反而被广泛应用...原创 2019-11-30 19:43:20 · 1342 阅读 · 0 评论 -
一文学会 Opengl ES中YUV420与RGB转化
2014年曾经做过一款类似当今“抖音”的短视频软件,叫“魔力秀”。可以说和现在的抖音基本是一样的,但因为“魔力秀”出生过早,加上投资人不看好,注定无法成长为一棵参天大树,最终只发了一个版本就结束了。当时“魔力秀App”的视频回显模块是我设计实现的,所以就有了这篇文章。事过多年,将这篇文章拿出来整理,因为这项技术依然不过时,反而被广泛应用...原创 2017-05-22 10:50:49 · 8646 阅读 · 0 评论 -
一文学会 公开课3D勋章实现方案
opengl es 2.0中加载.obj 与 .mtl本来以为网上应该有兼容性较好的obj与mtl的java解析库,但在网上找了好多代码,发现其在加载obj与mtl中,基本都存在较大问题。网上代码主要分为了以下几个部分:mind3d 2011年就已停止维护(为opengl es1.0),并且在加载多图形上存在很大的不兼容(主要解析了obj,mtl没有解析)。其他一些obj解析代码,基本都是解析了原创 2017-08-10 13:37:44 · 5053 阅读 · 12 评论 -
一文详解 .obj 和 .mtl文件格式
obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。原创 2017-08-08 12:12:47 · 9631 阅读 · 2 评论 -
一文详解 Interpolator动画插值器
Interpolator 被用来修饰动画效果,定义动画的变化率。 在Android源码中对应的接口类为 TimeInterpolator,通过输入均匀变化的0~1之间的值,可以得到匀速、正加速、负加速、无规则变加速等0~1之间的变化曲线。原创 2021-08-30 19:35:22 · 1250 阅读 · 0 评论 -
一文学会 MediaCodeC与OpenGL录制mp4视频
之前遇到这样一个需求,要求将`Camera`采集的数据通过`硬编码`录制`生成一个mp4`,录制视频过程中还要求`实时回显Camera画面`。当然需求的原话肯定不是这样描述的,这是我以一个技术人员的角度理解后的需求。原创 2017-05-19 15:16:17 · 5689 阅读 · 2 评论 -
一文Shader变量使用避坑——uniform、varying变量多次if判断会严重降低帧率
2014年年中,在使用着色器进行图形渲染时,发现shader中uniform、varying变量的if或for判断会严重影响帧率,而且这一现象与Android ROM平台没有关系。这里对该现象进行一个记录,并给出对应的解决方案。原创 2017-05-19 15:14:56 · 4681 阅读 · 0 评论 -
一个猜测——三维空间重叠图元 “交替闪烁“ 现象猜想
之前有一段时间,使用OpenGL ES进行图形渲染过程中:三维空间中,两个深度相同三维实体,重叠部分出现交替闪烁的现象。原创 2013-05-01 21:13:29 · 1109 阅读 · 0 评论 -
计算机图形学基础知识-光照材质
计算机图形学基础知识-光照材质1.进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。真实感图形绘制是计算机图形学的一个重要组成部分,它综合利用数学、物理学、计算机科学和其它科学知识在计算机图形设备上生成象彩色照片那样的具有真实感的图形。 一般说来,用计算机在图形设备上生成真实感图形必须完成以下四个步骤: + 一是建转载 2017-08-07 11:31:38 · 4776 阅读 · 1 评论 -
一文详解OpenGL ES矩阵变换:三维空间中的旋转、平移和缩放
在OpenGL ES中,三维空间中模型的平移、缩放和旋转操作,通常通过矩阵(4x4矩阵)变换来实现,从而改变3D模型对象的位置、大小和方向。矩阵变换是一种常见的计算机图形学技术,广泛应用于游戏、仿真和可视化等领域。通过矩阵变换,甚至可以将一个模型从其本地坐标系转换到世界坐标系,再从世界坐标系转换到视图坐标系,最终投影呈现在屏幕上。原创 2017-05-22 10:57:40 · 774 阅读 · 0 评论 -
一文详解 OpenGL 中三种抗锯齿处理
OpenGL ES中设置抗锯齿的方式有很多,这里介绍的三种方式。不同的场景可能适合不同的抗锯齿方式,如果您遇到锯齿问题,还需要根据具体问题具体分析。纹理加载阶段抗锯齿:设置合适的纹理采样方式;点、线、多边形抗锯齿:采用开启混合抗锯齿;多重采样原创 2013-05-01 21:13:06 · 5099 阅读 · 0 评论 -
一文详解 OpenGL ES中2的N次方纹理问题
从OpenGL ES官方API中,我们可以知道从OpenGL ES2.0开始,加载纹理时,对图片的宽高已不再要求未2的N次方比例。这一点在许多情况下还是非常有用的,例如:来自视频或摄像头的数据可能不为2的N次方。但从实际设备测试可知,对于OpenGL ES2.0的终端设备,不同厂商的设备表现可能不同,因此,对于加载的纹理,若可以使用2的N次方纹理,还是要尽量保持2的N次方。原创 2013-05-01 21:32:05 · 2446 阅读 · 0 评论 -
一文详解 OpenGL ES 纹理颜色混合
在OpenGL中绘制的时候,有时候想使新画的颜色和已经有的颜色按照一定的方式进行混合。例如:想使物体拥有半透明的效果,或者绘制叠加光亮的效果,这时候就需要用到OpenGLES混合。如上图所示,为石头墙、绿色矩形、蓝色云彩 三个矩形混合后的展示效果。三个矩形(Z轴深度由深到浅)分别为,石头墙、绿色矩形、蓝色云彩。一、混合API在OpenGLES中若使用混合,需要用到API函数方法(Java):void glBlendFunc( int srcfactor, int destfactor );(1)原创 2021-11-30 15:51:17 · 1670 阅读 · 0 评论 -
一文详解 OpenGL采样API—— glTexParameter glGenerateMipmap glTexImage2D
在OpenGL ES中 glTexParameter、glGenerateMipmap、glTexImage2D 这三个API经常用于纹理采样、生成Mipmap纹理 和 加载纹理图。glTexParameter 用于加载纹理时的纹理采样 与 纹理拉伸算法 设定;glGenerateMipmap 用于生成Mipmap纹理;glTexImage2D 用于加载纹理图;原创 2013-05-01 21:32:44 · 3719 阅读 · 0 评论 -
一文详解 纹理采样与Mipmap纹理——构建山地渲染效果
在开发一些相对较大的场景时,例如:一片铺满相同草地纹理的丘陵地形,如果不采用一些技术手段,就会出现远处的丘陵较近处的丘陵相比更加的清晰的视觉效果,而这种效果与真实世界中近处的物体清晰远处物体模糊的效果是相违背的。这是因为采用“透视投影”进行三维场景的绘制过程中,会产生近大远小的效果,而远处的丘陵与近处丘陵在绘制过程中采用的却是同一幅纹理图。如下图所示为未采用Mipmap纹理贴图和采用Mipmap纹理贴图后的运行效果。原创 2013-05-01 21:40:50 · 2143 阅读 · 0 评论 -
一文详解 深度缓冲API——glClearDepthf与glDepthFunc
详解 深度缓冲API——glClearDepthf与glDepthFunc原创 2013-05-01 21:41:35 · 1440 阅读 · 0 评论 -
一文简介 深度坐标精度
开启深度测试后,还需要设置深度缓冲区的位数以达到合理的精度。如果精度不足在“远方”的物体可能出现不希望的重叠。原创 2013-05-01 21:12:25 · 1407 阅读 · 0 评论 -
一文详解 OpenGL着色模式——平滑GL_SMOOTH、单调GL_FLAT着色
在Android GLSurfaceView中进行图形渲染时,经常会用到着色模式,其一般分为两种模式:一种是平滑着色 glShadeModel(GL10.GL_SMOOTH);一种是单调着色 glShadeModel(GL10. GL_FLAT)。两种着色模式,一般常用的为 平滑着色GL_SMOOTH 。原创 2013-05-01 21:15:08 · 2752 阅读 · 0 评论 -
一文详解 OpenGL ES绘制模式——自动渲染与脏渲染模式
在Android中使用 GLSurfaceView 进行图形渲染时,存在两种可选的绘制模式:一种是自动循环模式:OpenGL线程以一定的时间间隔自动的循环调用用户实现的 onDrawFrame() 方法进行一帧一帧的绘制;一种的“脏渲染”模式:当用户需要重绘的时候,主动“拉去”这个重绘过程,有点类似于Canvas中的invalidate()原创 2013-05-01 21:10:42 · 1295 阅读 · 0 评论 -
一文详解 OpenGL ES绘制方式——绘制 点 线 三角形
在OpenGL ES中,点、线段、三角形是构成三维物体的基本单位。所有的三维渲染物体均由这三种基本图形组合构成,而点、线段、三角形,这些构成三维物体的基本单位,每一类中又包括一种或多种具体的绘制方式。原创 2013-05-01 21:09:56 · 1658 阅读 · 0 评论 -
一文了解 OpenGL ES Shading Language
从OpenGL ES2.0开始,OpenGL ES由固定渲染管线更改为可编程渲染管线。因此开发人员若使用OpenGL ES2.0版本及以上API进行图形渲染,必须使用着色语言(OpenGL ES Shading Language)编写顶点着色器与片元着色器的代码。与OpenGL ES1.x固定渲染管线相比:顶点着色器 取代了固定渲染管线中的 变换和光照;片元着色器 取代了固定渲染管线中的纹理环境和颜色求和、 雾 以及 Alpha测试。OpenGL ES 着色语言(OpenGL ES Shadin原创 2021-11-29 17:29:10 · 395 阅读 · 0 评论 -
一文详解 OpenGL ES渲染管线——抖动
抖动是一种在色彩空间较小的设备上展示较大色彩空间的图像的一种方法。例如:在一个RGB_565的设备上展示RGB_888的图像,展示时如果简单进行数据截断位,会造成色彩的失真和生硬。抖动使用一个矩阵,来调整一个像素周围的像素的值,来使人眼产生错觉,而模拟出原来的色彩。原创 2013-05-01 21:11:36 · 3228 阅读 · 0 评论 -
一文详解 OpenGL ES渲染管线——模板测试
模板测试,可以选择性丢弃一些绘制的片元(像素点),实际应用中可以在不规则形状中绘制图元,例如:在湖面上绘制两岸树木或建筑的倒影。原创 2013-05-01 21:14:10 · 1201 阅读 · 0 评论 -
一文详解 OpenGL ES渲染管线——深度测试
深度测试是在片元处理过程中通过测试一个片元在`视椎体`的深度坐标,来判断它是否被更小深度坐标的片断遮挡而决定是否真去绘制它(开启深度测试有助于节省GPU性能)原创 2013-05-01 21:12:03 · 1104 阅读 · 0 评论 -
一文详解 OpenGL ES 3.x 渲染管线
OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成。如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成。而组成圆锥的每一个三角形,其任意一个顶点由三维空间中 x、y、z 三个坐标分量来定义。对于我们日常使用的移动手持设备,手机屏幕窗口由不连续的有限的二维像素小格子构成的,每一个像素格子有x、y两个分量来定义。因此在OpenGL ES绘制流程中,其主要工作是将三维空间中的坐标点(x,y,z)构成的三维图形,转化为手机屏幕上的二维像素点。这个转化过程主要分为两个步骤:原创 2021-11-22 10:55:30 · 1566 阅读 · 0 评论 -
一文详解 OpenGL ES 2.x 渲染管线
khronos官方对OpenGL ES的描述如下:OpenGL® ES is a royalty-free, cross-platform API for rendering advanced 2D and 3D graphics on embedded and mobile systems - including consoles, phones, appliances and vehicles. It consists of a well-defined subset of desktop OpenG原创 2021-08-27 21:12:39 · 753 阅读 · 0 评论 -
一文详解 EGL与使用举例
EGL 是底层原生平台窗口与 Khronos渲染API (如OpenGL ES、OpenVG等) 之间的接口,为OpenGLES等图形API 提供渲染窗口、图形上下文(EGLContext)、同步绘制接口等机制,使其可以与不同的平台窗口建立关联关系,从而实现在不同平台上(如Android、Windows等)的渲染工作。原创 2013-05-01 21:31:05 · 1818 阅读 · 0 评论 -
一文了解 OpenGL ES
OpenGL ES(OpenGL for Embedded Systems) 是一种免费的跨平台3D图形 API接口,其适用于低功耗设备,可用于嵌入式设备和移动设备(包括手机、车载大屏 和嵌入式电器终端设备)上渲染高效的 2D 、 3D 图形。其由OpenGL(Open Graphics Library)针对嵌入式设备裁剪而来,去除了OpenGL中许多不是必须冗余特性,比如:GL_QUADS(四边形)、GL_POLYGONS(多边形)绘制模式、glBegin(开始)/glEnd(结束)等特性。OpenG原创 2021-11-17 16:53:21 · 2496 阅读 · 0 评论 -
一文学会 PC搭建opengl es C++开发环境
win7下VS2013搭建opengl es 2.0的C++开发环境@(预发布)[Opengl es]文章参考: http://codingnow.cn/opengles/1501.html1. 下载AMD的OpenGL ES2.0的模拟器,下载地址:http://www.opengles-book.com/ESEmulator.2009-04-28-v1.4.APRIL_2009_RELEASE原创 2017-05-22 10:33:25 · 3718 阅读 · 0 评论