OpenGLES(一)——介绍

news2024/12/26 12:07:01

一、OpenGL介绍

    OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
    OpenGL在不同的平台上有不同的实现,但是它定义好了专业的程序接口,不同的平台都是遵照该接口来进行实现的,思想完全相同,方法名也是一致的,所以使用时也基本一致,只需要根据不同的语言环境稍有不同而已。OpenGL这套3D图形API从1992年发布的1.0版本到目前最新2014年发布的4.5版本,在众多平台上多有着广泛的使用。

二、OpenGLES介绍

1.简介

    OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。
    OpenGL ES相对于OpenGL来说,减少了许多不是必须的方法和数据类型,去掉了不必须的功能,对代价大的功能做了限制,比OpenGL更为轻量。在OpenGL ES的世界里,没有四边形、多边形,无论多复杂的图形都是由点、线和三角形组成的,也去除了glBegin/glEnd等方法。

2.OpenGLES应用场景

    OpenGL ES是手机、PDA和游戏主机等嵌入式设备三维(二维也包括)图形处理的API,当然是用来在嵌入式设备上的图形处理了,OpenGL ES 强大的渲染能力使其成为我们在嵌入式设备上进行图形处理的优良选择。

  • 我们经常使用的场景有
    • 图片处理。比如图片色调转换、美颜等。
    • 摄像头预览效果处理。比如美颜相机、恶搞相机等。
    • 视频处理。摄像头预览效果处理可以,这个自然也不在话下了。
    • 3D游戏。比如神庙逃亡、都市赛车等。

3.OpenGLES版本

目前主流的手机都已经支持OpenGLES3.0版本及以上。
OpenGL ES 3.2 - 额外的 OpenGL 功能
  • 该系列的最新版本 OpenGL ES 3.2 添加了基于 OpenGL ES 3.1 的Android 扩展包的附加功能,这使得移动 API 的功能明显更接近其桌面对应物 - OpenGL。
OpenGL ES 3.1 - 将计算引入移动图形
  • 尽管 OpenGL ES 3.1 只是 API 的次要修订版中的一个凸起,但它是 API 的一个巨大里程碑,因为它增加了在 API 中进行通用计算的能力,从而将计算引入了移动图形。
OpenGL ES 3.0 - 增强的图形
  • OpenGL ES 3.0 是 OpenGL ES 的另一个进化步骤,特别是包括多个渲染目标、额外的纹理功能、统一缓冲区、实例化和变换反馈。
OpenGL ES 2.0 - 可编程着色
  • OpenGL ES 2.0 是第一个在当时最新一代图形硬件中公开可编程着色器的便携式移动图形 API。它在今天仍然是一个流行的 API,仍然是最广泛使用的 3D 图形 API,并且仍然是针对市场上最广泛设备的可靠选择。
OpenGL ES 1.X - 固定功能图形
  • OpenGL ES 1.0 和 1.1 是第一个可移植的移动图形 API,相对于 OpenGL 1.5 规范定义,提供固定功能图形加速

三、OpenGLES的渲染管线

1.什么是渲染管线

    渲染管线又称渲染流水线,它是图形图像从数据一步一步形成最终输出的画面所要经历的各种操作过程。数据经过一个操作后,被处理成下一个步骤需要的数据,最终一步一步整合成拼凑最终画面的元素。

  • 抽象来说,以下两个大步骤是必要:
    • 顶点渲染:用于渲染出形状
    • 像素渲染:在形状中填充色彩

所以你可以简单地认为,渲染管线就是:
在这里插入图片描述

2.固定管线

固定渲染管线的OpenGLES不需要也不允许你自己去定义顶点渲染和像素渲染的具体逻辑,它内部已经固化了一套完整的渲染流程,只需要开发者在CPU代码端输入渲染所需要的参数并指定特定的开关,就能完成不同的渲染。

OpenGLES 1.x版本就是固定渲染管线的版本。现有的OpenGLES 1.x版本有:

OpenGLES 1.0
OpenGLES 1.1

3.可编程渲染管线

可编程渲染管线的OpenGLES版本必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染和像素渲染中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率,也可自己实现特定的算法和逻辑来渲染出固定管线无法渲染的效果。具有很高的可定制性,但同时也对开发者提出了更高的要求。

OpenGLES 2.0及其以上的版本则为可编程渲染管线的版本。目前具体的OpenGLES版本有:

OpenGLES 2.0
OpenGLES 3.0
OpenGLES 3.1

固定管线与可编程管线:
在这里插入图片描述

OpenGLES的一些基本概念

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

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

相关文章

六、创建Gitee仓库和提交代码

1、创建仓库 1.1、创建远程仓库 (1)登录Gitee.com,点击右上角 号,再点击新建仓库。 (2)填写仓库名称,设置公开(一般指开源项目)或者私有,其他默认(也可以根据自己需要选择) (3)这里要勾选设置模板,Readme文件。(如果…

Java I/O 流详解(Basic I/O)

目录 1、Java Basic I/O 中的字节流:Byte Streams 2、Java Basic I/O 中的字符流:Character Streams 3、Java Basic I/O 中的缓冲流:Buffered Streams 4、Java Basic I/O 中的打印流:PrintStream (数据扫描和格式化…

网易二面:CPU狂飙900%,该怎么处理?

说在前面 社群一位小伙伴面试了 网易,遇到了一个 性能类的面试题: CPU飙升900%,该怎么处理? 可惜的是,以上的问题,这个小伙没有回答理想。 最终,导致他网易之路,终止在二面&…

【蓝桥杯】Python字符串处理和应用

前言: 本文侧重于通过实战训练来提高字符串的处理能力,可以先行学习一下我之前的文章:蓝桥杯Python快速入门(4) ,学习完基础知识再来刷题才会事半功倍! 字符串处理 # 字符串切片 str1"1…

优秀码农选择对象详细指南,看完记得要实战噢

2023年了,你是否已到了法定年纪,那么这一篇优秀码农选择对象的详细指南,你一定用得到,看完记得感谢狗哥哦! 目录 一、对于婚姻先来思考这么几条 1. 太快决定结婚? 2. 一方或双方急于结婚? 3.…

【go语言入门教程】——1. go语言介绍及安装

目 录1. go 语言简介2. go 语言安装2.1 下载安装包2.2 安装 go2.3 验证安装结果3. 使用 VS Code 运行 go 程序1. go 语言简介 go的产生 go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 go 是从 2007 年末由 Robert Griesemer, Rob Pike, Ken…

Linux系统常见问题总结(持续更新)

目录一,vim安装与设置1,安装2,配置二,Found a swap file by the name三,docker启动失败:Job for docker.service failed because the control process exited with error四,docker-compose安装r…

JavaScript基础知识点整理(一)——运算符比较、闭包、深浅拷贝、原型、

内容主要涉及JavaScript:运算符比较、闭包、深浅拷贝、原型。 JavaScript闭包、原型、深浅拷贝1、 和 的差异2、JavaScript闭包3、JavaScript深浅拷贝3.1、浅拷贝3.2、深拷贝4、JavaScript原型1、 和 的差异 对于而言,若对比双方的类型不一样的话&…

MicroBlaze系列教程(2):AXI_INTC的使用

文章目录 @[TOC]AXI_INTC简介常用函数使用示例参考资料工程下载本文是Xilinx MicroBlaze系列教程的第1篇文章。 AXI_INTC简介 AXI_INTC中断控制器用于将多路中断信号按照优先级输出一路给处理器,支持AXI4-Lite总线,最多支持32个中断输入,中断输入可配置为边沿触发或电平触发…

【vuex】一.vue.js的基本指令;二.vue.js全家桶开发;三.vuex

目录 一.vue.js的基本指令 1.Vue的作用:快速的构建前端页面(封装了html、css、js),以工程化的方式进行前端的开发 2.Vue的核心: (1)组件化: (2)数据的双…

shell执行脚本的方法及环境变量

执行脚本的方法 (1)bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行) (2)./filename.sh(产生子进程,再运行,使用脚本里面指…

vue3 手撕日历控件

vue制作日历控件 效果如下&#xff1a; <template><div class"cal_con" style"margin-left:200px"><div class"cal_header"><!-- 顶部左侧 --><div class"cal_header_left"><div class"cal_he…

STL分析(十 hash、function type_traits、cout、move )

hash function 假定存在一个Customer类 class Customer{ public:string fname, lname;int no; };其哈希函数存在三种方式 //方式一&#xff1a;创建可调用类型 class CustomerHash { public:std::size_t operator()(const Customer& c) const{return ......} };unordere…

Android 签名基础知识

目录Android 为什么要签名keystore的生成&#xff1a;keystore信息的查看参数说明&#xff1a;Android 怎么签名使用 jarsigner 签名如何查找 jdk 位置签名时遇到的问题查看 apk 是否签名查看 Apk 的MD5值以及MD5不显示时的解决办法缺少 xx.RSA 文件的原因V1 vs V2Android 为什…

Coolify系列-解决局域网主机突然连不了虚拟机

开始之前&#xff0c;我们需要确保配置一切正常&#xff0c;原始配置参考下文 Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务 如果是之前已经配置好的&#xff0c;突然无法访问了&#xff0c;采取以下方式进行排查操作 在虚拟机执行 ifconf…

【GD32F427开发板试用】基于蓝牙的远程步进电机控制

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;寒冰1988 一、前言 接上篇文章【GD32F427开发板试用】基于蓝牙模块的远程点灯演示&#xff0c;本篇是第二篇&#xff0c;基于调通的蓝牙模块添…

Pytest-Allure测试报告

Allure 模块下载 pip install allure-pytest包下载 https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/此处我选择下载最新的&#xff0c;版本上可以选择不是最新的&#xff0c;2.9.0的。下载zip或者tgz后缀格式的都可以。 配置环境变量 找到解压…

RPA自动办公01——Uibot的安装和基础用法

本期开始RPA的学习流程。 RPA是机器人自动化流程的简写&#xff0c;目的在于减少重复性的劳动&#xff0c;而且上手很简单&#xff0c;无需编程就能用。 本系列使用Uibot 软件&#xff0c;其下载地址在&#xff1a;来也科技流程创造者&#xff08;UiBot Creator&#xff09; …

searchableSelect 插件使用

<script type"text/javascript" src"//searchableSelect.js"></script> <script>function getUserServer() {var _this 自定义封装接口请求、弹窗等方法;_this.getAjax("get","//xxxxx/server", {}, function(res)…

前端异常监控平台Sentry安装配置使用及问题

前言&#xff1a;Sentry是一款开源的异常监控平台,支持各种语言的SDK&#xff0c;通过对应SDK可以收集错误信息和性能数据&#xff0c;并可以再后台web页面中查看相关信息。官方地址&#xff1a;安装说明&#xff1a;https://develop.sentry.dev/self-hosted/后台使用说明&…