opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)

2024-02-26 08:44

本文主要是介绍opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、opengles3.0 绘制图元介绍
  • 二、绘图图元 API 介绍
    • 1. glDrawArrays()
      • 1.1 glDrawArrays()函数原型
      • 1.2 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 三者的区别
      • 1.3 使用GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 绘制四边形的实例
    • 2. glDrawElements()和glDrawRangeElements()
      • 2.1 glDrawElements()和glDrawRangeElements()函数原型
      • 2.2 glDrawElements()和glDrawRangeElements() 绘制四边形实例
        • 2.2.1 使用GL_TRIANGLES
        • 2.2.2 使用GL_TRIANGLE_STRIP
        • 2.2.3 使用GL_TRIANGLE_FAN
    • 3. glDrawArrayInstanced()和glDrawElmentsInstanced()
      • 3.1 glDrawArrayInstanced()和glDrawElmentsInstanced() 函数原型
      • 3.2 glDrawArraysInstanced()和glDrawElmentsInstanced()绘制多个四边形实例
        • 3.2.1 glDrawArraysInstanced() 绘制3个四边形实例
        • 3.2.2 glDrawElmentsInstanced()绘制3个四边形实例
  • 总结
  • 参考资料


前言

本文主要介绍 opengles3.0 所支持的绘制图元 API 相关接口, 这里主要介绍绘制三角形的接口
软硬件环境:
硬件:PC
软件:ubuntu22.04 opengles3.0


一、opengles3.0 绘制图元介绍

opengles3.0 中有5个绘制图元的API 调用,分别是 glDrawArrays(), glDrawElements(), glDrawRangeElements(), glDrawArraysInstanced(), glDrawElementsInstanced()
其中目前用的比较多的是前3个 API接口,特别是前2个,用的场景特别多。

二、绘图图元 API 介绍

1. glDrawArrays()

glDrawArrays是一个OpenGLES函数,用于根据顶点数组中的数据进行绘制。它可以绘制一系列的图元,如点、线、三角形等,这些图元的顶点数据都存储在顶点数组中。

1.1 glDrawArrays()函数原型

glDrawArrays() 函数原型如下图所示:
在这里插入图片描述

1.2 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 三者的区别

下图展示了opengles3.0中支持的三角形图元类型示例
在这里插入图片描述

这里主要介绍一下, mode 参数中的 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 这三者的区别
在OpenGLES中,GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN都是用于绘制三角形的图元类型。它们在定义和使用三角形时有一些区别:

  1. GL_TRIANGLES
    GL_TRIANGLES是最简单的三角形绘制方式之一,每三个顶点定义一个独立的三角形,总共绘制了n/3 个三角形,其中n是 glDraw*** API 中的Count 指定的顶点索引数目。例如,如果你有9个顶点,那么GL_TRIANGLES将会绘制3个不相交的三角形。
  2. GL_TRIANGLE_STRIP
    GL_TRIANGLE_STRIP 使用连续的三个顶点来定义三角形,绘制一系列相互连接的三角形,从第三个顶点开始,每新增一个顶点都会和前两个顶点组成一个新的三角形,总共绘制了 n-2 个三角形,其中n是 glDraw*** API 中的Count 指定的顶点索引数目。例如,如果你有4个顶点,那么GL_TRIANGLE_STRIP将会绘制2个三角形,顶点顺序为(0, 1, 2)和(2, 1, 3)(注意顺序)。
  3. GL_TRIANGLE_FAN
    GL_TRIANGLE_FAN 使用一个起始顶点和后续顶点来定义三角形,也绘制一系列相连的三角形。第一个顶点作为所有三角形的共同顶点,后续的每个顶点和前一个顶点以及起始顶点组成一个新的三角形,总共绘制了 n-2 个三角形,其中n是 glDraw*** API 中的Count 指定的顶点索引数目例如,如果你有4个顶点,那么GL_TRIANGLE_FAN将会绘制2个三角形,顶点顺序为(0, 1, 2)和(0, 2, 3)。

这三种绘制方式各有其特点,选择合适的方式取决于你想要绘制的场景和顶点数据的组织方式。在实际开发中,通常会根据具体需求选择合适的绘制方式来实现所需的图元效果。

1.3 使用GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 绘制四边形的实例

  1. GL_TRIANGLES
GLfloat vVertices[] = {//vertex pointer//x   y   z-0.8f,0.8f,0.0f,	//v0 top left-0.8f,-0.8f,0.0f,	//v1 bottom left0.8f,-0.8f,0.0f,	//v2 bottom right-0.8f,0.8f,0.0f,	//v0 top left0.8f,-0.8f,0.0f,	//v2 bottom right0.8f,0.8f,0.0f,		//v3 top right};glViewport(0, 0, WIDTH, HEIGHT);			//set the view portglClearColor(0.00f, 0.70f, 0.67f, 1.0f);		//set rgba value for backgroud glClear(GL_COLOR_BUFFER_BIT);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices

这篇关于opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748290

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi