活动介绍

OpenGLES图形编程入门:基础与变换

立即解锁
发布时间: 2025-08-24 00:52:51 阅读量: 1 订阅数: 8
### OpenGL ES 图形编程入门:基础与变换 #### 1. OpenGL ES 基础注意事项 在使用 OpenGL ES 进行图形编程时,有一个重要的点需要注意:混合操作(Blending)成本较高。当前的移动 GPU 在处理大量像素的混合时表现并不理想,所以应避免过度使用混合,仅在绝对必要时才使用。 #### 2. 更多图元类型 除了常见的三角形,OpenGL ES 还能渲染点和线等图元。这些图元同样通过顶点来定义,并且之前提到的纹理映射、逐顶点颜色等操作也适用于它们。在调用 `glDrawArrays()` 或 `glDrawElements()` 时,使用除 `GL10.GL_TRIANGLES` 之外的常量即可渲染这些图元。以下是 OpenGL ES 提供的所有图元类型: | 图元类型 | 描述 | | ---- | ---- | | 点(Point) | 每个顶点就是一个独立的图元 | | 线(Line) | 由两个顶点组成,2 * n 个顶点可定义 n 条线 | | 线带(Line strip) | 所有顶点被解释为属于一条长线 | | 线环(Line loop) | 类似于线带,但 OpenGL ES 会自动从最后一个顶点到第一个顶点绘制一条额外的线 | | 三角形(Triangle) | 由三个顶点组成 | | 三角形带(Triangle strip) | 只需指定三角形数量 + 1 个顶点,OpenGL ES 会依次构建三角形 | | 三角形扇(Triangle fan) | 有一个共享的基础顶点,以此构建多个三角形 | 三角形带和三角形扇的灵活性稍逊于单纯的三角形列表,但它们能提升一些性能,因为需要与投影和模型视图矩阵相乘的顶点更少。不过,在代码中我们通常还是使用三角形列表,因为它更易于使用,并且通过使用索引也能达到相近的性能。 在 OpenGL ES 中,点和线的渲染有点特殊。当使用像素完美的正交投影时,例如屏幕分辨率为 320 * 480 像素,并且 `glOrthof()` 调用使用这些确切的值,在某些情况下仍无法实现像素完美的渲染。由于所谓的菱形退出规则,点和线顶点的位置需要偏移 0.375f。在进行像素完美的点和线渲染时,需要牢记这一点。 #### 3. 2D 变换与模型视图矩阵 到目前为止,我们只是以三角形列表的形式定义了静态几何图形,没有涉及移动、旋转或缩放操作。而且,即使顶点数据本身保持不变,若要在不同位置绘制相同的矩形,仍需复制顶点。而模型视图矩阵可以解决这个问题。 ##### 3.1 世界空间与模型空间 为了理解模型视图矩阵的工作原理,我们需要跳出正交视图平截头体的概念。视图平截头体处于一个特殊的坐标系,即世界空间,所有顶点最终都会落在这个空间中。此前,我们一直使用相对于世界空间原点的绝对坐标来指定顶点位置。现在,我们希望顶点位置的定义独立于世界空间坐标系,这可以通过为每个模型(如 Bob 的矩形、宇宙飞船等)赋予自己的坐标系来实现,这个坐标系就是模型空间。 以下是一个简单的模型定义示例: ```java Vertices vertices = new Vertices(glGraphics, 4, 12, false, false); vertices.setVertices(new float[] { -50, -50, 50, -50, 50, 50, -50, 50 }, 0, 8); vertices.setIndices(new short[] {0, 1, 2, 2, 3, 0}, 0, 6); ``` 当不做任何修改直接渲染这个模型时,它会在最终图像的世界空间原点附近显示。若要将其渲染到不同位置,例如中心位于世界空间的 (200, 300),可以重新定义顶点位置: ```java vertices.setVertices(new float[] { -50 + 200, -50 + 300, 50 + 200, -50 + 300, 50 + 200, 50 + 300, -50 + 200, 50 + 300 }, 0, 8); ``` 但这种方法比较繁琐。 ##### 3.2 矩阵与模型视图矩阵 矩阵可以编码平移、旋转和缩放等变换。投影矩阵用于将顶点投影到投影平面,而模型视图矩阵则可以更优雅地解决顶点位置移动的问题。以下是如何使用模型视图矩阵将模型原点移动到特定位置的示例: ```java gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); gl.glTranslatef(200, 300, 0); vertices.draw(GL10.GL_TRIANGLES, 0, 6); ``` 操作步骤如下: 1. 告诉 OpenGL ES 要操作的矩阵,这里是模型视图矩阵(`GL10.GL_MODELVIEW`)。 2. 将模型视图矩阵设置为单位矩阵,清空之前的内容。 3. 使用 `glTranslatef()` 方法指定在 x、y、z 轴上的平移量。由于是 2D 编程,忽略 z 轴,将其平移分量设为 0。 4. 调用 `vertices.draw()` 方法渲染模型。 从这一步开始,OpenGL ES 的模型视图矩阵就编码了一个 (200, 300, 0) 的平移变换,该变换会应用到通过 OpenGL ES 管线的所有顶点上。 ##### 3.3 平移示例 假设我们要在世界中不同位置渲染 100 个 Bob 图形,并且让它们在屏幕上移动,每次碰到屏幕边缘就改变方向。一种方法是使用一个大的 `Vertices` 实例来存储 100 个矩形的顶点,并在每一帧重新计算顶点位置。更简单的方法是使用一个小的 `Vertices` 实例只存储一个矩形(Bob 的模型),并通过模型视图矩阵实时平移来重复使用它。 以下是 Bob 模型的定义: ```java Vertices bobModel = new Vertices(glGraphics, 4, 12, false, true); bobModel.setVertices(new float[] { -16, -16, 0, 1, 16, -16, 1, 1, 16, 16, 1, 0, -16, 16, 0, 0, }, 0, 8); bobModel.setIndices(new short[] {0, 1, 2, 2, 3, 0}, 0, 6); ``` 每个 Bob 的大小为 32 * 32 单位,并且进行了纹理映射。 接下来定义一个 `Bob` 类来管理 Bob 的位置和移动: ```java package com.badlogic.androidgames.glbasics; import java.util.Random; class Bob { static final Random rand = new R ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

Big黄勇

硬件工程师
广州大学计算机硕士,硬件开发资深技术专家,拥有超过10多年的工作经验。曾就职于全球知名的大型科技公司,担任硬件工程师一职。任职期间负责产品的整体架构设计、电路设计、原型制作和测试验证工作。对硬件开发领域有着深入的理解和独到的见解。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

Brocade MIBs网络带宽管理:基于MIBs的监控与控制策略详解

![Brocade MIBs网络带宽管理:基于MIBs的监控与控制策略详解](https://substackcdn.com/image/fetch/w_1200,h_600,c_fill,f_jpg,q_auto:good,fl_progressive:steep,g_auto/https%3A%2F%2Fsiteproxy.ruqli.workers.dev%3A443%2Fhttps%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F400e92f8-7e84-4ba6-9443-74368c1eaeb6_3735x3573.jpeg) # 摘要 本文综述了Brocade MIBs在网络带宽管理中的应用,

BCM5396日志分析与故障诊断:掌握日志管理,快速定位问题

# 摘要 本文围绕BCM5396日志分析与故障诊断的核心议题展开,首先概述了日志分析与故障诊断的基本概念,随后深入探讨了日志数据的类型、结构、收集、存储、安全性和合规性管理。紧接着,文中介绍了多种日志分析工具及其实践应用,包括模式匹配、日志聚合、排序和可视化技术,并通过实际案例分析展示了日志分析在故障诊断和性能优化中的重要性。文章进一步详细阐述了故障诊断的流程、工具和策略,并对故障案例进行了深入分析,提出了解决方案及预防措施。最后,本文探讨了日志管理的最佳实践以及故障预防和持续改进方法,旨在为网络管理和故障排除提供指导和参考。 # 关键字 BCM5396;日志分析;故障诊断;数据管理;安全合

【飞行模拟器的自动化测试】:实现F-16模拟配平的自动化校准,效率倍增!

![【飞行模拟器的自动化测试】:实现F-16模拟配平的自动化校准,效率倍增!](https://d3i71xaburhd42.cloudfront.net/d30c440a618b1e4e9e24152ae112553108a7a48d/24-Figure4.1-1.png) # 摘要 本文对飞行模拟器自动化测试进行了全面概述,探讨了自动化测试的理论基础、F-16模拟配平自动化校准的实现、自动化校准测试的深度应用与优化,以及未来展望。自动化测试不仅提高了测试效率和准确性,还降低了人力成本。针对F-16模拟配平,文章详细介绍了自动化校准脚本的设计、开发、测试与部署,并分析了校准测试数据,提出了

固件更新风险评估与减轻策略:系统停机的最小化

![固件更新风险评估与减轻策略:系统停机的最小化](https://montemagno.com/content/images/2021/09/Screen-Shot-2021-09-06-at-7.59.46-AM.png) # 摘要 固件更新作为维护设备安全性与性能的重要手段,在技术快速发展的今天显得尤为重要,但同时伴随着风险和挑战。本文深入探讨了固件更新过程中的风险评估、控制点识别、系统停机成本及影响,并通过实践案例分析了成功与失败的固件更新经验。针对固件更新风险,文章提出了一系列减轻策略,包括风险预防措施、自动化更新流程、持续集成策略以及用户教育和技术支持的重要性。最后,本文展望了固

【GIS地图制图精要】:打造专业级别的内蒙古水系分布图

![【GIS地图制图精要】:打造专业级别的内蒙古水系分布图](https://www.nicoladeinnocentis.it/sito/wp-content/uploads/2017/10/georeference.png) # 摘要 本文全面探讨了地理信息系统(GIS)在地图制图中的应用,涵盖了从数据获取到制图实践操作的整个流程。文章首先介绍了GIS的基础知识以及地图制图的基本概念。随后,针对内蒙古水系数据的获取、预处理、清洗和质量控制进行了详细讨论,并比较了当前流行的GIS软件及其制图功能。在分析和制图方面,文章深入探讨了水文地理学的应用、专题制图技术和动态变化分析方法。实践操作章节

用户体验(UX)设计在软件交付中的作用:3个挑战与应对策略

![用户体验(UX)设计在软件交付中的作用:3个挑战与应对策略](https://website-dev.hn.ss.bfcplatform.vn/Pr_F_Mr1_V3x_Vyl1_N_Tao_Xor_Sn00lqzl0_Ca_Kp_N_Iae_Zwya_Ry_Zb_Fi_X_58b5bee1ca.png) # 摘要 用户体验(UX)设计在软件交付中扮演着至关重要的角色。本文首先探讨了用户体验设计的理论基础,包括基本原则、用户研究方法论以及设计思维和迭代过程。然后,分析了在软件交付过程中用户体验设计所面临的挑战,如与开发时间表的冲突、技术限制、以及需求理解和沟通障碍。接着,文中提出了应对这

【STM32CubeIDE代码补全完全教程】:成为STM32开发专家的终极学习路径

![【STM32CubeIDE代码补全完全教程】:成为STM32开发专家的终极学习路径](https://reversepcb.com/wp-content/uploads/2023/05/STM32CubeMX-Configuration-Perspective.png.webp) # 摘要 随着嵌入式系统开发的普及,STM32CubeIDE作为一种集成开发环境,其代码补全功能在提升开发效率和代码质量方面扮演着重要角色。本文首先介绍了STM32CubeIDE的基本概念及安装流程,随后深入探讨了代码补全的理论基础、实践应用和性能优化。特别地,本文分析了代码补全如何与STM32开发实践相结合,

老冀文章编辑工具v1.8版本对比分析:升级前后的10大功能变化

![老冀文章编辑工具v1.8版本对比分析:升级前后的10大功能变化](https://img-blog.csdnimg.cn/a1f48b1e898a4f5aa549a41fa0a6acd1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2luZzEwMQ==,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 本文详细介绍老冀文章编辑工具v1.8版本的多项功能升级和优化。新版编辑器在文本编辑能力、图片和媒体元素管理、语法检查工具等方面均有显著提升。协

【DB文件查看工具终极对比】:权威指南助你选出最佳解决方案

![【DB文件查看工具终极对比】:权威指南助你选出最佳解决方案](https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/10/S4HANA-Embedded-Analytics-Spend-Reporting-2-1.jpg) # 摘要 本文深入探讨了数据库文件(DB文件)与数据库基础知识,对比分析了核心DB文件查看工具的功能、性能、用户体验和界面设计。进一步探讨了这些工具的高级功能与定制化能力,如数据导出、报告生成、批量处理、自动化能力和插件系统。通过实践案例与对比测试,分析了不同工具在实际应用中的表

持续集成与部署(CI_CD)实施:S12(X)项目管理秘诀

![持续集成与部署(CI_CD)实施:S12(X)项目管理秘诀](https://www.edureka.co/blog/content/ver.1531719070/uploads/2018/07/CI-CD-Pipeline-Hands-on-CI-CD-Pipeline-edureka-5.png) # 摘要 随着软件开发速度的加快,持续集成与持续部署(CI/CD)已成为企业确保快速交付高质量软件的关键实践。本文深入探讨了CI/CD的核心概念、工具选择与技术实践,并结合S12(X)项目的案例分析了CI/CD的实施细节。文中详细阐述了CI/CD工具的分类与特点,流水线设计原则以及环境配置