Android核心开发之——OpenGL
OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现实、科学可视化、计算机辅助设计等领域。OpenGL具有高性能、灵活性和可扩展性的特点,可以利用图形硬件的加速功能,实现快速而逼真的图形渲染。
OpenGL的简单使用与解析
以下是一个简单的OpenGL使用代码示例,用于创建一个窗口并绘制一个彩色三角形:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}
int main()
{// 初始化GLFWglfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// 创建窗口对象GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL Window", NULL, NULL);if (window == NULL){glfwTerminate();return -1;}glfwMakeContextCurrent(window);
// 初始化GLEW if (glewInit() != GLEW_OK){return -1;}
// 设置视口大小 int width, height;glfwGetFramebufferSize(window, &width, &height);glViewport(0, 0, width, height);glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// 定义顶点数据 float vertices[] = {-0.5f, -0.5f, 0.0f,0.5f, -0.5f, 0.0f,0.0f, 0.5f, 0.0f };
// 创建顶点缓冲对象 unsigned int VBO;glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 创建顶点数组对象 unsigned int VAO;glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);
// 渲染循环 while (!glfwWindowShouldClose(window)){// 输入处理 glfwPollEvents();
// 渲染指令 glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);
// 绘制三角形glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES, 0, 3);
// 交换缓冲区glfwSwapBuffers(window);}
// 清理资源glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glfwTerminate();return 0;
}
代码解析:
- 引入必要的头文件:glew.h 和 glfw3.h。
- 定义回调函数 framebuffer_size_callback,用于处理窗口大小变化时的事件。
- 在 main 函数中,初始化 GLFW,设置 OpenGL 版本和配置窗口属性。
- 创建窗口对象,并检查是否创建成功。
- 设置当前上下文为窗口的上下文。
- 初始化 GLEW。
- 获取窗口的帧缓冲大小,并设置视口大小。并设置窗口大小变化时的回调函数。
- 定义顶点数据,这里定义了一个简单的三角形。
- 创建顶点缓冲对象(VBO)并将顶点数据绑定到缓冲区。
- 创建顶点数组对象(VAO)并配置顶点属性指针。
- 进入渲染循环,判断窗口是否需要关闭。
- 处理输入事件,例如键盘输入。
- 清空颜色缓冲区。
- 绑定顶点数组对象和绘制指令,绘制三角形。
- 交换前后缓冲区,更新窗口显示。
- 清理资源,删除顶点数组对象和顶点缓冲对象。
- 终止 GLFW,释放所有的资源。
演示了一个最基本的OpenGL使用流程,包括初始化OpenGL环境、创建窗口、设置视口、创建顶点缓冲区和顶点数组对象、渲染循环以及清理资源等。你可以根据自己的需求,进一步扩展和修改代码,添加纹理映射、光照效果等,实现更复杂的图形渲染。本文主要简单解析了在Android开发中OpenGL技术使用,更多有关Android开发的核心技术可以参考《Android核心技术手册》点击可查看详细类目。

最后
OpenGL是一个跨平台的图形编程接口,用于实现2D和3D图形的渲染和处理。它提供了一系列函数和状态机来操作图形硬件,使开发者能够创建各种复杂的图形效果和交互式应用程序。OpenGL仅仅提供了底层的图形操作接口,开发者需要具备一定的图形学知识和编程技巧,才能充分利用OpenGL的功能。
相关文章:
Android核心开发之——OpenGL
OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现…...
公共服务领域:西安新小区业主自立业主委员会年底分红83万以及103万事件区块链资金透明监管与投票解决方案的尝试
公共服务领域:西安新小区业主自立业主委员会年底分红83万以及103万事件区块链资金透明监管与投票解决方案的尝试 作者 重庆电子工程职业学院 | 向键雄 杜小敏 前言 本项目想法来源于,西安新小区业主开出物业自立业主委员会年底分红83万以及103万事件,对于此类事件,我们刨…...
ID3 决策树
西瓜数据集D如下: 编号色泽根蒂敲声纹理脐部触感好瓜1青绿蜷缩浊响清晰凹陷硬滑是2乌黑蜷缩沉闷清晰凹陷硬滑是3乌黑蜷缩浊响清晰凹陷硬滑是4青绿蜷缩沉闷清晰凹陷硬滑是5浅白蜷缩浊响清晰凹陷硬滑是6青绿稍蜷浊响清晰稍凹软粘是7乌黑稍蜷浊响稍糊稍凹软粘是8乌黑稍蜷浊响清晰…...
简单线性回归:预测事物间简单关系的利器
文章目录 🍀简介🍀什么是简单线性回归?🍀简单线性回归的应用场景使用步骤:注意事项: 🍀代码演示🍀结论 🍀简介 在数据科学领域,线性回归是一种基本而强大的统…...
Vue2-收集表单数据、过滤器、内置指令与自定义指令、Vue生命周期
🥔:我徒越万重山 千帆过 万木自逢春 更多Vue知识请点击——Vue.js VUE2-Day4 收集表单数据1、不同标签的value属性2、v-model的三个修饰符 过滤器内置指令与自定义指令1、内置指令2、自定义指令定义语法(1)函数式(2&am…...
正则表达式学习详解
正则表达式 正则表达式(Regular Expression),通常简称为正则或正则表达式,是一种用于描述字符串模式的工具。它是由一系列字符和特殊字符组成的字符串,用于定义搜索模式或进行字符串匹配、替换、提取等操作。 正则表…...
工具箱:在线免费使用的文档工具:(PDF转换,图片压缩等)
这些都是博主亲自使用过的,可以使用。 PDF转换器: http://www.pdfdo.com/ 图片压缩: 免费在线图片/视频压缩工具 | 图片压缩 | 免费 JPG PNG GIF 图像压缩 (yalijuda.com) 文档OCR转EXCEL: 文字识别 OCR_ 图片文字识别_图片文字智能识别…...
Qt6之QStackedWidget——Qt仿ToDesk(2)
一、 QStackedWidget概述 QStackedWidget也叫堆栈窗体类,它继承于QFrame,主要与QListWidget等结合使用,实现“一个界面多个页面切换”。 二、QStackedWidget示例 如下图,当点击左边 QListWidget里的菜单时,右边跟随切…...
Harbor企业镜像仓库部署(本地)
简述: Docker 官方镜像仓库是用于管理公共镜像的地方,大家可以在上面找到想要的镜像,也可以把自己的镜像推送上去。但是有时候服务器无法访问互联网,或者不希望将自己的镜像放到互联网上,那么就需要用到 Docker Regis…...
【Linux】如何打包成动静态库,第三方动静态库如何使用?
文章目录 1. 打包成静态库2. 打包成动态库(共享库)3. 使用第三方静态库4. 使用第三方动态库 5. 动态库的加载6. 注意事项 库的名称:去掉前面的 lib 去掉后面的 .a(版本号) .so(版本号) 剩下的,才是库正真的名称。 查看文件依赖库…...
SAP MM学习笔记20- SAP中的英文2 - SD中英文,日语,中文
SD模块中的英文,日语,中文 对照。 販売管理 日本語英語中国語受注伝票sales order销售订单出荷伝票delivery order交货订单ピッキングリストpicking list领货清单シップメント伝票shipment document发运单据出庫確認post goods issue发货确认請求伝票b…...
计算机网络中的一些基本概念
IP地址: 址用于定位主机的网络地址。是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节).**端口号:**在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单…...
pytest 用例运行方式
一、命令行方式运行 执行某个目录下所有的用例,符合规范的所有用例 进入到对应的目录,直接执行pytest; 例如需要执行testcases 下的所有用例; 可以进入testcases 目录; 然后执行pytest 进入对应目录的上级目录,执行pytest 目录名称/ ; ; 例如需要执行testcases 下…...
简单入门seleniumUI自动化测试
目录 一、selenium的介绍 二、selenium的原理 三、selenium的八种元素定位的方法 1、ID定位: 2 、name定位: 3、class定位: 4、tag定位: 5、link_text定位: 6、partial_link_text定位: 7、css定位…...
Excel(1):表头或列头冻结
1.需求 对于较大的excel,通常需要固定一部分内容,另一份内容为可翻动。 2.解决方式 在视图中选择冻结窗格,需要注意的是,选择冻结窗格时,窗格的左上方的表格区域是固定不动的,只可以向下或者向右活动。...
通达OA SQL注入漏洞【CVE-2023-4166】
通达OA SQL注入漏洞【CVE-2023-4166】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…...
全网最细,Python接口自动化测试-Session会话保持(实战详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在接口测试的过程…...
Java项目初始化ES、MYSQL表结构及表数据
一、初始化MYSQL数据 public boolean initMysql() throws Exception {log.info("initMysql.start");//获取所连接的数据库名称String database systemMapper.getDatabase();if (StringUtils.isBlank(database)) {throw new BusinessException("连接数据库失败,…...
2023-08-13力扣每日一题
链接: 88. 合并两个有序数组 题意: 如题 解: 从后往前(从大到小)插入排序,这样就不会影响原先的有序性 实际代码: #include<bits/stdc.h> using namespace std; void merge(vector…...
下一代深度学习的思考与若干问题
下一代深度学习的思考和若干问题...
航片匀色实战:CaptureOne与天工软件的高效处理技巧
1. 航片匀色的核心挑战与解决方案 航拍影像处理中最让人头疼的问题之一,就是天气条件导致的色彩不均匀。我处理过上百个航测项目,发现80%的航片都需要不同程度的匀色处理。特别是遇到雾霾、阴雨天气时,拍出来的照片就像蒙了一层灰纱ÿ…...
Lingbot-Depth-Pretrain-ViTL-14快速上手:Anaconda虚拟环境配置详解
Lingbot-Depth-Pretrain-ViTL-14快速上手:Anaconda虚拟环境配置详解 你是不是也遇到过这种情况:好不容易跟着教程装好了一个AI模型,结果运行的时候报了一堆错,不是这个库版本不对,就是那个依赖冲突。更头疼的是&#…...
Spring Cloud Zuul实战:5分钟搞定微服务网关配置(含Eureka集成)
Spring Cloud Zuul极速实践:从零构建高可用微服务网关 微服务架构的流行让系统拆分变得更加灵活,但同时也带来了新的挑战——如何优雅地管理众多服务的入口?想象一下,当你的系统由数十个微服务组成时,客户端需要记住每…...
科技中介服务机构如何借助数据提升服务专业性?
观点作者:科易网-国家科技成果转化(厦门)示范基地一、现状概述:成效与短板 在数智化转型加速的背景下,科技中介服务机构作为连接创新供给与产业需求的桥梁,其服务专业性直接决定了科技成果转化的效率与质量…...
AnyChart 的tagCloud组件
组件渲染失败错误protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_mistake_analysis);MistakeDao mistakeDao new MistakeDao(MistakeAnalysisActivity.this);List<String> subjectErrorlist…...
爱毕业(aibiye)的AI技术可提升数学建模论文的复现质量,并简化排版流程
还在为论文写作头痛?特别是数学建模的优秀论文复现与排版,时间紧、任务重,AI工具能帮上大忙吗?今天,我们评测10款热门AI论文写作工具,帮你精准筛选最适合的助手。 aibiye:专注于语法润色与结构…...
【Hadoop进阶】Hadoop生态圈实战指南:从核心组件到典型应用场景解析
1. Hadoop生态圈的核心价值与架构设计 第一次接触Hadoop的人常会被它庞大的生态体系吓到,但理解其设计哲学后就会发现非常直观。我在2013年第一次部署Hadoop集群时,最惊讶的是它用普通服务器就能搭建起PB级数据处理能力。Hadoop生态圈本质上是用分布式架…...
beberlei/assert与Symfony/Zend验证器的深度对比:为什么选择轻量级方案
beberlei/assert与Symfony/Zend验证器的深度对比:为什么选择轻量级方案 【免费下载链接】assert Thin assertion library for use in libraries and business-model 项目地址: https://gitcode.com/gh_mirrors/ass/assert 在现代PHP开发中,数据验…...
Wan2.2-I2V-A14B参数详解:duration/resolution/prompt长度对显存影响分析
Wan2.2-I2V-A14B参数详解:duration/resolution/prompt长度对显存影响分析 1. 模型与硬件环境概述 Wan2.2-I2V-A14B是一款先进的文生视频模型,能够根据文本描述生成高质量视频内容。本分析基于专为RTX 4090D 24GB显存优化的私有部署镜像环境,…...
从打印机到多屏协同:Kylin-Desktop-V10-SP1设备设置保姆级配置指南
从打印机到多屏协同:Kylin-Desktop-V10-SP1设备设置保姆级配置指南 刚拿到预装Kylin-Desktop-V10-SP1的新设备时,许多用户会面临一个共同问题:如何快速搭建高效的工作环境?本文将带你从最基础的外设配置开始,逐步构建完…...
