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

news/2024/12/12 8:56:41/

目录

一、获取图片纹理数据

二、着色器编写

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.ppmy.cn/news/1554450.html

相关文章

基于java+SSM+Vue的家庭记账本小程序设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例

一、引言 在当今数字化的时代,前端开发扮演着至关重要的角色,它决定了用户与网页和应用程序交互的体验。HTML、CSS 和 JavaScript 作为前端开发的核心技术,分别负责网页的结构、样式和交互。本教程将为前端新手全面深入地介绍 HTML、CSS 和 …

uniapp实现Android apk自动检测更新强制下载安装

概要 本篇文章主要讲诉uniapp 打包的APK如何实现在线升级功能,实现强制升级更新、可选升级更新、下载进度百分比显示、下载完成自动跳转安装功能,自己项目已经测试没有问题,可以结合自己的项目进行引入使用。 需求分析 1、需要进入app进行检…

java中23种设计模式的优缺点

文兴一言 设计模式分为创建型模式、结构型模式和行为型模式。以下是每种设计模式及其优缺点的详细介绍: 一、创建型模式 简单工厂模式 优点:通过一个共同的工厂类来创建对象,将对象的创建逻辑封装在一个地方,客户端只需要与工厂…

CTF: 在本地虚拟机内部署CTF题目docker

step 1 安装基本依赖 sudo apt-get update sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-releasestep 2 安装docker sudo apt-get remove docker docker.io containerd runc sudo apt-get update sudo apt-get install \apt-transport-https \ca-certificate…

GoldenGate ogg进程参数说明

OGG参数 1.OGG常用操作命令 cd ${OGG安装路径}/ ./ggsci -------进入ogg shell中 注: 1.以下命令均需在ggsci中执行 2.涉及进程以EXT_HY,PM_HY,REP_HY为例 3.涉及trail文件前缀以hy为例1.1.基本运维命令 #查看所有进程状态 info all #查看某个进程的状态 info E…

Toxicity of the Commons: Curating Open-Source Pre-Training Data

基本信息 📝 原文链接: https://arxiv.org/abs/2410.22587👥 作者: Catherine Arnett, Eliot Jones, Ivan P. Yamshchikov, Pierre-Carl Langlais🏷️ 关键词: toxicity filtering, language models, data curation📚 分类: 机器…

【Elasticsearch01】企业级日志分析系统ELK之Elasticsearch单机部署

Elasticsearch 单机部署 Elasticsearch 安装说明 官方文档 https://www.elastic.co/guide/en/elastic-stack/index.html https://www.elastic.co/guide/en/elasticsearch/reference/master/install-elasticsearch.html部署方式 包安装二进制安装Docker 部署Ansible 批量部署…