OpenGL入门一:基础知识及概念

1、什么是OpenGL

OpenGL:open graphic library,即开发图形库。它被定义为“图形硬件的一种软件接口”。实质上是3D图形和模型库,它具有高度可移植性,并且具有非常快的速度。可以创建优雅漂亮的3D图形,具有出色的视觉质量。并且速度远快于光线追踪仪或软件渲染引擎。

1.1 OpenGL是编程语言吗?

OpenGL不是一种像C和C++这样的编程语言,它更像是一个C运行函数库,提供了一些预包装的功能。实际上,并不存在像OpenGL程序这类东西,而是我们开发人员所写的程序,恰好使用了OpenGL作为编程接口之一。举个例子,Windows是一种编程语言吗?并不是,所谓的Windows程序员也只是基于Windows提供的API开发软件的程序员而已。

1.2 OpenGL和谁打交道

一般来说,OpenGL是由那些专门用于显示和操纵3D图形的计算机硬件所使用的(显卡、GPU,后面我们逐步介绍到)。纯软件的通用OpenGL实现也是可以的。比如我们Android手机系统的硬件吗和硬编码,操作系统完全可以不实现这部分硬件,然后使用软件实现一套;还有我们的路由器,我们也完全可以不专门买路由器,而是搞一台主机,然后插两块网卡,用软件实现路由表,路由分发。微软实现方案类似于这种纯软件实现,性能表现并不是很好。

1.3 OpenGL应用场景

OpenGL使用非常广泛,比如CAD工业制图软件、PS图像设计软件、电影特效、游戏等。随着硬件加速以及高速的PC微处理器的普及,3D图形现已成为消费者和商业程序的典型组件,不在局限于游戏和科学应用。

1.4 OpenGL演进历史

OpenGL前身是SGI(Silicon Graphics,Inc)公司(SGI是一家久负盛名的公司,在计算机和动画方面处于领先的地位)的IRISGL,也是SGI对IRIS GL的移植性进行改进和提高的结果。这个新的API不仅具有GL的功能,而且是一个开放的标准。他的输入来自于其他图形厂商,并且更容易应用到其他平台和操作系统。从根本上讲,OpenGL就是为3D几何图形处理量身定做的。

SGI希望更多计算机能够运行OpenGL软件,因此诞生了ARB(OpenGL Architecture Reiview Board),尽管SGI控制OpenGL API,但ARB的创立者还包括SGI、 DEC、 IBM、 Intel、 Microsoft。ARB每隔4年召开一次会议,对规范进行维护和改善,并对OpenGL标准进行升级。2006年SGI公司已经破产,把OpenGL标准控制从ARB移交给了新的工作组:The Khronos Group(www.khronos.org)。Khronos是一个由它的成员提供资金的行业协会,专注于开放媒体标准的创建和维护。大多数ARB成员也成为了

Khronos成员,因此变动没有他打破。现在我们搜索OpenGL相关的知识结果都是Khronos小组的,Khronos升级了OpenGL以及姊妹API-OpenGL ES,并且推出了用于替换OpenGL的Vulkan。

2、 学OpenGL到底学什么?

OpenGL设计硬件、软件、接口、标准等一系列的知识,所以我们要真正深入了解OpenGL应该从以下几个方面入手:

  1. OpenGL标准接口;

  2. 数学方便知识(三角函数、矩阵等);

  3. 平台相关知识(EGL等);

  4. 可编程管线中Sharder编程知识;

  5. 硬件相关知识和概念(比如GPU设计原理等)

系统通过我们系列文章可以对OpenGL有深入理解。

3、OpenGL原理之变换

在这里插入图片描述

由上图,我们从(x,y)旋转到(x’,y’),通过三角函数知识有:

x' = r * cos(a + b);= r * (cos(a)*cos(b) - sin(a)*sin(b));= x * cos(a) - y * sin(a);
y' = r * sin(a + b);= r * [sin(a)cos(b) + cos(a)*sin(b)];= x * sin(a) + y * cos(a);

近一步化简:

x' = x * cos(a) - y * sin(a);
y' = x * sin(a) + y * cos(a);

是不是我们的矩阵运算?

在这里插入图片描述

4、投影

我们一般有两种投影方式:

  • 透视投影

  • 正投影

我们日常生活就遵循透视投影规则:“远小近大”,《三体》里云天明将的故事中深水王子就是个“正投影”的怪物。体现在我们渲染中,如何做透视投影呢?

在这里插入图片描述

其实很像我们的小孔成像。有三个位置组成:人眼、远平面、近平面。最终两个平面形成的平截头体(棱台)中的物体被投射到二维平面的远平面中。

5、总结

本文介绍了OpenGL相关的知识:OpenGL历史、OpenGL发展、OpenGL应用等,并且介绍了OpenGL需要掌握的知识,OpenGL变换原理及投影成像原理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3实现video视频+弹幕评论

vue3实现视频加评论 之前写了一篇博客使用了弹幕插件http://t.csdnimg.cn/616mlvue3 使用弹幕插件,今天对这个页面进行了升级 变成了 vue3使用video 这个没有使用插件,昨天看了好多,没发现有用的插件,下载了几个都没办法使用就用…

Linux C++ 多线程编程

Linux C 多线程编程 参考教程: c:互斥锁/多线程的创建和unique_lock<mutex>的使用_mutex 头文件 vcCSDN博客 1. 编写unique_mutex 1.1 创建文件夹 通过终端创建一个名为unique_mutex的文件夹以保存我们的VSCode项目&#xff…

基于HTML弹性布局做的支付宝界面

里面有一些语言图标&#xff0c;想用的可以去iconfont-阿里巴巴矢量图标库里面寻找&#xff0c;这类图标跟文字一样可以设置大小、文本居中之类的&#xff0c;并不算严格意义上的图片&#xff0c;废话不多说&#xff0c;直接上成果和代码 <!DOCTYPE html> <html lang&…

C语言程序设计-[14] 循环结构的一些应用(续)

1、求n! 。 对于这个问题&#xff0c;首先分析四个要素如下&#xff1a; 循环初始化条件&#xff1a;i1; fact1; //n!1*2*3*...*n&#xff0c;从这个问题来看&#xff0c;首先需要乘起来的数有n个&#xff0c;第一个即i1&#xff0c;然后需要fact来存储乘起来的数(初始时fac…

SpringBoot下载resources目录下的文件

1.引入SpringBoot和hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>2.在项目resources目录下放入模版文件&#xff0c;结构如下&#xff1a…

【学习笔记】解决在声音输出中找不到蓝牙耳机设备的问题

【学习笔记】在声音输出中找不到蓝牙耳机设备 在使用蓝牙耳机的时候&#xff0c;遇见一个问题&#xff0c;就是在电脑在连接蓝牙耳机之后&#xff0c;在声音输出中找不到蓝牙耳机设备&#xff0c;只能使用扬声器播放声音。电脑使用的是Windows 11系统。后来在网上寻找解决方案…

使用MAC电脑、iPhone 真机调试 H5页面

使用MAC电脑、iPhone 真机调试 H5页面 简介Safari 浏览器设置iPhone 手机设置开始调试 简介 为方便在 H5开发过程中在真实手机调试 H5页面&#xff0c;可进行一下设置 Safari 浏览器设置 在 Mac 电脑打开浏览器后&#xff0c;点左上角的" Safari 浏览器" -> “设…

LVS详细配置

目录 LVS简介 LVS集群体系结构 LVS相关术语 lvs集群的类型 1、NAT模式 NAT简介 NAT模式数据逻辑 2、DR模式 DR模式简介 DR模式数据逻辑 DR模式的特点 3、TUN模式 TUN模式简介 TUN模式数据传输过程 TUN模式特点 4、fullnet模式 LVS模式总结 LVS调度算法 LVS静…

每天五分钟深度学习pytorch:训练神经网络模型的基本步骤

本文重点 本文个人认为是本专栏最重要的章节内容之一,前面我们学习了pytorch中的基本数据tensor,后面我们就将学学习深度学习模型的内容了,在学习之前,我们先来看一下我们使用pytorch框架训练神经网络模型的基本步骤,然后我们下面就将这些步骤分解开来,详细学习。 代码…

力扣第45题:跳跃游戏 贪心DP(C++)

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

途博V16 g110m,g120,g120c,g120d未安装(已解决)

官网下载驱动并安装就行&#xff0c;安装流程和安装软件本体的流程一样&#xff0c; 驱动下载地址&#xff1a; SIOS 安装流程参考&#xff1a;博途V16软件官方下载和安装_博途软件怎么从官网下载-CSDN博客

Python之布尔(逻辑)运算符:and、or、not

这是《Python入门经典以解决计算问题为导向的Python编程实践》65-73页的内容&#xff0c;是对上一篇内容的补充&#xff0c;主要讲了布尔运算符。 深入控制语句 1、布尔变量2、关系运算符3、布尔运算符&#xff08;逻辑运算符&#xff09;4、优先级自测练习 1、布尔变量 布尔…

Node.js是什么?如何安装

目录 一、前言 1、JavaScript语言-----前端开发 2、JavaScript语言-----后端开发 总结&#xff1a;如果我们写了一段 js 代码&#xff0c;把他放到浏览器中执行&#xff0c;是在做前端开发&#xff1b;如果放在Node.js下运行&#xff0c;是在做后端开发。 二、安装 1、打开…

如何学习一门编程语言?

“好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 如何学习一门编程语言&#xff1f; 如何学习一门编程语言&#xff1f;1.做好笔记2.保证充足的学习时间和练习时间。不能超过三天断学。会遗忘和变得懒散。明确学习的目标 3.学习顺序进入基础部分不…

string详解(1)

1.C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用户自己管理&…

地接侠小程序(Taro)兼容IOS系统Bug解决(redux持久化不成功、整个页面会拖动)

在写地接侠小程序的时候就是有考虑过兼容问题的&#xff0c;但是在写的过程中并没有用苹果手机进行调式&#xff0c;一直都是用的自己的安卓手机&#xff0c;一直都是没有问题的&#xff0c;但是毕竟项目需要上线&#xff0c;于是在上线前用苹果手机测试果然出现了预想中的问题…

确保线程安全:深入理解.Net开发中 `Control.InvokeRequired` 属性

1. 前言 在 .NET 开发中&#xff0c;特别是在 Windows 窗体应用程序中&#xff0c;多线程编程是一个常见的需求。为了确保界面的稳定性和响应性&#xff0c;需要掌握如何在不同线程之间安全地进行操作。在本文中&#xff0c;我们将深入探讨 Control.InvokeRequired 属性&#x…

Windows--WSL2--Ubuntuon--Docker

编写目的&#xff1a; 在Windows上安装Docker&#xff0c;用Docker安装Gitlab、Jenkins等软件。 文章记录一下Windows上安装Docker的过程。 参考文档&#xff1a; 旧版 WSL 的手动安装步骤 | Microsoft Learn 下面用"参考文档"代替 目录 第一步&#xff1a;启…

java实现将数据分别写入excel和word里面,并将这2个文件压缩进行下载,vue调用接口进行下载

数据导入word和excel并通过vue调用接口下载 1、后端接口开发1.1、通过EasyExcel将数据写入excel里面1.2、设置word模板,通过 WordExportUtil.exportWord07将数据写入word里面1.3、对上面生成的word和excel进行压缩1.4 下载zip文件2、前端代码开发2.1、前端 Axios 配置2.2、 AP…

mysql字符编码利用技巧(三字节和四字节)

目录 一、研究代码 1.1 总结&#xff1a; 二、第二个问题 2.1解答 三、第三个问题 3.1解答 一、研究代码 <?php $mysqli new mysqli("localhost", "root", "abc123", "cat");/* check connection */ if ($mysqli->conne…