OpenGL ES详解——多个纹理实现混叠显示

目录

一、获取图片纹理数据

二、着色器编写

1. 顶点着色器

2. 片元着色器

三、绑定和绘制纹理

1. 绑定纹理

2. 绘制纹理

四、源码下载


一、获取图片纹理数据

获取图片纹理数据代码如下:

//获取图片1纹理数据
mTextureId = loadTexture(mContext, R.mipmap.scenery)
//获取图片2纹理数据
mTextureMeiNvId = loadTexture(mContext, R.mipmap.meinv)fun loadTexture(context: Context, resourceId: Int): Int {var bitmap = generateBitmap(context, resourceId)if (bitmap == null) {Log.d(TAG, "resourceId could not be decoded.")return 0}return getImgTexture(bitmap)
}fun getImgTexture(bitmap: Bitmap): Int {val textureObjectIds = IntArray(1)glGenTextures(1, textureObjectIds, 0)if (textureObjectIds[0] == 0) {glDeleteTextures(1, textureObjectIds, 0)return 0}glBindTexture(GL_TEXTURE_2D, textureObjectIds[0])glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)texImage2D(GL_TEXTURE_2D, 0, bitmap, 0)glGenerateMipmap(GL_TEXTURE_2D)bitmap.recycle()glBindTexture(GL_TEXTURE_2D, 0)return textureObjectIds[0]
}

二、着色器编写

1. 顶点着色器

代码如下:

attribute vec4 a_Position; // 顶点坐标
attribute vec2 a_TextureCoordinates;  //纹理坐标
varying vec2 aCoord;void main(){gl_Position = a_Position;aCoord = a_TextureCoordinates;
}

2. 片元着色器

代码如下:

precision mediump float;// 数据精度varying vec2 aCoord;
uniform sampler2D  u_TextureUnit;
uniform sampler2D  u_TextureUnit1;void main(){gl_FragColor = mix(texture2D(u_TextureUnit, aCoord), texture2D(u_TextureUnit1, aCoord), 0.5);
}

三、绑定和绘制纹理

1. 绑定纹理

     GLES20.glActiveTexture(GL_TEXTURE0)GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId)mTextureShaderProgram!!.setUniforms(mTextureShaderProgram!!.getTextureUniformLocation(),0)GLES20.glActiveTexture(GL_TEXTURE1)GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureMeiNvId)mTextureShaderProgram!!.setUniforms(mTextureShaderProgram!!.getTextureUniform1Location(),1)

2. 绘制纹理

        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 6)

图一:

图二:

叠加后的效果图如下:

四、源码下载

Android OpenGL ES多个纹理实现混叠显示项目源码

下载地址:

https://download.csdn.net/download/github_27263697/90115686

推荐文章

https://juejin.cn/post/7155040552353234951

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java引用相关(四大引用类型,软引用避免oom,弱引用表,虚引用和引用队列,可达性分析算法)

1. 什么是引用? 问题:什么是引用?Java中的引用是如何工作的? 答案: 引用 是对象的句柄,用于访问堆内存中的对象。在Java中,引用变量实际上存储的是对象的地址,而不是对象本身。通…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端(Docker Client)2. Docke…

linux学习笔记01 基础命令

目录 创建 touch 创建文件 (创建但是不打开) vi / vim 创建文件 (创建一个文件并打开) mkdir 创建文件夹 切换目录 cd 查看 pwd 查看当前目录完整路径 ls 查看目录信息 dir 查看目录信息 ll 表示查看目标目录下的信息 ls -a 查看当前目录下的…

【深度学习】深刻理解多模态模型CLIP

CLIP(Contrastive Language-Image Pretraining) 是由 OpenAI 提出的一个多模态模型,旨在学习视觉和语言的联合表示,能够通过图像和文本之间的对比学习来实现图像和文本之间的紧密联系。CLIP 模型可以通过自然语言描述理解和处理图…

android 聊天界面键盘、表情切换丝滑

1、我们在聊天页面时候,往往会遇到,键盘、表情、其他选择切换时候页面会出现掉下来再弹起问题,这是因为,我们切换时候,键盘异步导致内容View高度变化,页面掉下来后,又被其他内容顶起这种很差视觉…

Nginx 缓存系统 proxy_cache详解

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行;当前是秒级时间戳,如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…

网络药理学:(待更)Alphafold3和批量分子动力学模拟(Desmond、AutoMD)

批量动力学模拟 注意全都需要在类linux平台上进行 安装Desmond模块: https://github.com/Wang-Lin-boop/Schrodinger-Script 安装AutoMD模块: Wang-Lin-boop/CADD-Scripts: Scripts for virtual screening, cross docking and protein relax using Sc…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…

鲲鹏麒麟安装Kafka-v1.1.1

因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1,因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系统服务端开发模式-应用开发-登录退出发送邮件

一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下&#xff0c;修改Login.php&#xff0c;代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…

[游戏开发] Unity中使用FlatBuffer

什么是FlatBuffer 官网&#xff1a; GitHub - google/flatbuffers: FlatBuffers: Memory Efficient Serialization LibraryFlatBuffers: Memory Efficient Serialization Library - google/flatbuffershttps://github.com/google/flatbuffers 为什么用FloatBuffer&#xff0c…

MySQL其一,概念学习,可视化软件安装以及增删改查语句

目录 MySQL 1、数据库的概念 2、数据库分类 3、MySQL的安装 4、安装过程中的问题 DataGrip的使用&#xff1a; SQLynx的使用&#xff1a; 5、编写SQL语句 6、DDL语句 7、DML 新增数据&#xff1a; 删除数据&#xff1a; 修改数据&#xff1a; MySQL SQL其实是一门…

05 在 Linux 使用 AXI DMA

DMA简介 DMA 是一种采用硬件实现存储器与存储器之间或存储器与外设之间直接进行高速数据传输的技术&#xff0c;传输过程无需 CPU 参与&#xff08;但是CPU需要提前配置传输规则&#xff09;&#xff0c;可以大大减轻 CPU 的负担。 DMA 存储传输的过程如下&#xff1a; CPU 向…

linux 安装 vsftpd 服务以及配置全攻略,vsftpd 虚拟多用户多目录配置,为每个用户配置不同的使用权限

linux 安装 vsftpd 服务以及配置全攻略&#xff0c;vsftpd 虚拟多用户多目录配置&#xff0c;为每个用户配置不同的使用权限。 linux 安装 vsftpd 服务以及配置全攻略 FTP 是 File Transfer Protocol 的简称&#xff0c;用于 Internet 上的控制文件的双向传输。同时&#xff0…

SQL语句在MySQL中如何执行

MySQL的基础架构 首先就是客户端&#xff0c;其次Server服务层&#xff0c;大多数MySQL的核心服务都在这一层&#xff0c;包括连接、分析、优化、缓存以及所有的内置函数&#xff08;时间、日期、加密函数&#xff09;&#xff0c;所有跨存储引擎功能都在这一层实现&#xff1…

ragflow连不上ollama的解决方案

由于前期wsl默认装在C盘&#xff0c;后期部署好RagFlow后C盘爆红&#xff0c;在连接ollama的时候一直在转圈圈&#xff0c;问其他人没有遇到这种情况&#xff0c;猜测是因为内存不足无法加载模型导致&#xff0c;今天重新在E盘安装wsl 使用wsl装Ubuntu Win11 wsl-安装教程 如…

力扣-汉明距离

1.两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 看到这题&#xff0c;当然想到了按位异或^,并且c内置了计算二进制数中1数量的函数__builtin_popcount() class Solution { publ…