【OpenGL】(1) 专栏介绍:OpenGL 库 | 3D 计算机图形应用 | GPGPU 计算 | 3D 建模和 3D动画 | 渲染技术介绍

   🔗 《C语言趣味教程》👈 猛戳订阅!!!

  • 💭 写在前面:本专栏主要内容是关于 3D 计算机图形技术的学习,重点是学习与此技术相关的 3D 实时渲染 (3D real-time rendering) 技术。我们会以 "理论 + 实践" 的方式进行讲解,将重点介绍基于光栅化的 3D 渲染管线的计算结构,如 OpenGL / DirectX / Vulkan / Metal 等,并使用 OpenGL API 接口实现应用程序。

目录

0x00 专栏介绍

0x01 前置知识

0x02 将要学习的内容

0x03 开放图形库(OpenGL)

0x04 3D 计算机图形与应用

0x05 GPGPU 计算(General-Purpose GPU Computing)

0x06 3D几何建模和 3D动画

0x07 一些渲染技术的介绍


0x00 专栏介绍

本专栏主要内容是关于 3D 计算机图形技术的学习,重点是学习与此技术相关的 3D 实时渲染 (3D real-time rendering) 技术。我们会以 "理论 + 实践" 的方式进行讲解,将重点介绍基于光栅化的 3D 渲染管线的计算结构,如 OpenGL / DirectX / Vulkan / Metal 等,并使用 OpenGL API 接口实现应用程序。

GPU 通常被用来尽可能高效地加速这些计算过程,并且目前除了上述 API 之外,还支持用于通用 GPUPU(General-Purpose GPU Computing) 的 CUDA/OpenCL API。我们还将探索基本的光线追踪过程 (光追),并实现一个简单的光线追踪器,以及介绍扩展现实领域中与实时渲染相关的问题,比如立体图像生成和视觉焦点渲染。

值得一提的是,本专栏通过广泛应用的 OpenGL API 来正确理解基于光栅化的 3D 渲染管线的计算结构,这是计算机图形学教育中的关键内容。通过这样的理解,您将能够轻松地学习使用 API 进行 3D 图形编程。


0x01 前置知识

📌 注意:在本专栏中,我们假设读者已经掌握如下知识:

  • 掌握 C/C++ 的基础语法
  • 了解基本的矩阵和向量运算以及三角函数(基础线性代数)

以上是学习本专栏所需要的前置知识,对的,我们会在 Visual Studio 用 C++ 来写示例。

0x02 将要学习的内容

计算机图形学的核心主题包括几何建模、动画、渲染等。

我们的重点会放在 实时渲染 (real-time rendering) 上,这是业界最优先需要的基础技术。

为了获得通过3D图形编程解决问题的能力,计划涵盖基于OpenGL渲染管线的光栅化计算和初级光线追踪计算。最重要的目标是理解 3D 实时渲染管线 (3D Real-time Rendering Pipeline) 。

0x03 开放图形库(OpenGL)

📚 OpenGL(全称 Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形到比较复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

OpenGL 的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。

当今,OpenGL 是视频行业领域中用于处理2D/3D图形的最为广泛接纳的API,在此基础上,为了用于计算机视觉技术的研究,从而催生了各种计算机平台上的应用功能以及设备上的许多应用程序。其是独立于视窗操作系统以及操作系统平台,可以进行多种不同领域的开发和内容创作,简而言之,其帮助研发人员能够实现PC、工作站、超级计算机以及各种工控机等硬件设备上实现高性能、对于视觉要求极高的高视觉图形处理软件的开发。

❓ 为什么选择 OpenGL API?

① 跨平台性: OpenGL 是一个跨平台的图形 API,可以在多个操作系统上运行,包括 Windows、Linux、macOS 等。这意味着您 可以编写跨平台的图形应用程序,而不必担心特定操作系统的差异。

② 开放性和可移植性: OpenGL 是一个开放的标准,由 Khronos Group 维护,因此它不受特定公司的控制。这使得 OpenGL 在不同平台上的实现更加一致,并且使得它在各种硬件和软件环境中都可以使用。

③ 广泛支持: 由于 OpenGL 是一个开放的标准,并且存在已经实现的许多版本,因此它得到了广泛的支持。许多硬件厂商都提供了针对OpenGL的优化驱动程序,从而提高了图形性能和兼容性。

④ 强大的功能集: OpenGL 提供了丰富的功能集,可以实现各种图形效果和技术,包括3D渲染、纹理映射、光照和阴影等。

⑤ 社区支持和资源丰富: 由于 OpenGL 是一个老牌的图形 API,因此有许多丰富的教程、文档和社区资源可供参考和学习。这使得学习和开发OpenGL应用程序变得更加容易。

尽管现在有一些其他的图形 API 可供选择,比如 Vulkan,但是 OpenGL 仍然是一个流行且功能强大的选择,特别是对于那些希望实现跨平台图形应用程序的开发者来说。

0x04 3D 计算机图形与应用

📌 目的:研究创造类似现实的虚拟三维世界。以及生成和应用从中产生逼真图像所需的技术 —— 综合与分析 (Synthesis versus Analysis)

📜 核心主题如下:

  • 3D 几何建模(3D Geometric Modeling),如何有效地表现虚拟的三维世界中的物体?
  • 3D动画 (3D Animation) 如何自然地表现虚拟的三维世界中的动作?
  • 3D渲染(3D Rendering) 如何生成与使用相机拍摄的真实图像类似的图像?
  • 虚拟/增强/混合现实 (Virtual/Augmented/Mixed Reality) 如何通过使用各种用户界面将现实世界朝着更加有用的方向拓展?

0x05 GPGPU 计算(General-Purpose GPU Computing)

随着现在的 GPU 越来越牛b,不仅可以解决 3D 图形领域的问题,还可以用于解决具有 计算密集型数据并行 (compute-intensive data-parallel) 特性的一般应用问题。

什么是 compute-intensive data-parallel?

compute-intensive data-parallel,即 "计算密集型数据并行" 是一种计算模式,通常用于处理大量数据和执行复杂的计算任务。在这种模式下,数据被分成多个部分,并且这些部分同时被不同的处理单元处理,以加速整个计算过程。这种模式常见于需要处理大规模数据集的任务,例如机器学习模型的训练、图像和视频处理、科学计算等。在这些应用中,处理大量数据可能需要大量的计算资源和时间。通过将数据分割成小块,然后并行处理这些小块,可以加快整个计算过程的速度。在计算密集型数据并行中,通常使用的处理单元包括多核CPU、GPU、FPGA(可编程逻辑器件)等。这些处理单元具有并行处理能力,可以同时执行多个计算任务。通过合理地利用这些处理单元,可以实现高效的数据处理和计算任务加速。

CUDA / OpenCL编程:

0x06 3D几何建模和 3D动画

3D建模是通过专用软件开发任何三维物体的数学、线框表示的过程,称为 3D 模型。多边形模型,曲面模型,体积模型,过程模型……

"三维动画是指对物体的时间描述,即物体如何随着时间的推移而移动和变形。
移动和变形"。关键帧,逆运动学,动作捕捉,基于物理的模拟……

动作捕捉 (Motion capture):

基于物理的流体动画:

\triangledown \cdot u=0

\frac{\partial u}{\partial t}=-(u\cdot \triangledown )u+\nu \triangledown \cdot (\triangledown u)-\frac{1}{\varrho }\triangledown p+f

0x07 一些渲染技术的介绍

实时渲染 需要在 "极短 "时间内(如每秒 30-90 帧或更多)实时生成图像,以创建交互式图形应用软件。例如 三维游戏、虚拟/增强/混合现实、三维图形用户界面等。

在过去,由于需要在有限的时间内完成渲染计算,因此使用了 "简单化 "的渲染模型 → 生成的图像不够逼真。但现如今,处理器制造技术的最新进展使得实时生成非常逼真的图像成为可能。

逼真渲染(Photorealistic Rendering)是一种生成图像的技术,看起来就像用相机拍摄的一样。通常需要大量计算,但能生成高度逼真的图像。传统上用于电影 / 广告特效制作领域。

科学可视化 (Scientific Visualization),利用并行计算实现海量科学数据可视化的实例

📌 [ 笔者 ]   王亦优 | 雷向明
📃 [ 更新 ]   2023.3.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考文献:

- Inseong Lim, Programming Three-Dimensional Graphics with OpenGL: The Basics, Green Publishing, 2001.

– J. Hughes et al., Computer Graphics: Principles and Practice(3rd ed.), Addison-Wesley, 2013.

– S. Marscner et al., Fundamentals of Computer Graphics(4th ed.), CRC Press, 2015.

– E. Angel, Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL (7th ed.), Addison-Wesley, 2014.

– T. Akenine-Möller et al., Real-Time Rendering(4th ed.), AK Peters/CRC Press, 2018.

– D. Shreiner et al., OpenGL Programming Guide(9th ed.): The Official Guide to Learning OpenGL, Versions 4.5 with SPIR-V, 2016.

– G. Sellers and R. Wright Jr., OpenGL Superbible: Comprehensive Tutorial and reference(7th ed.), Addison-Wesley Professional, 2015.

– J. de Vries, Learn OpenGL – Graphics Programming, Kendall & Welling, 2020.

– D. Wolff, OpenGL 4 Shading Language Cookbook(3nd ed.), Packt Publishing, 2018.

– D. Ginsburg et al., OpenGL ES 3.0 Programming Guide(2nd ed.), Addison-Wesley, 2014

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大气颗粒物与VOCs PMF源解析:环保行业的新利器

在现今日益严峻的环境问题中,大气颗粒物和臭氧污染尤为突出,它们不仅深刻影响着全球气候和生态环境,更对人体健康构成了严重威胁。为了有效应对这一挑战,我们首先需要深入了解颗粒物和臭氧的来源,特别是臭氧的前体物之…

Unity接入海量RTSP直播流,多线程渲染

Unity 播放海量RTSP视频,多线程播放,长时间运行稳定 Unity 播放海量RTSP视频,多线程渲染 使用的libvlc库,目前只支持windows开发 25路视频同时播放,测试持续运行1晚上,运行稳定,不掉帧&#xf…

MySQL性能优化-范式设计和反范式设计

范式化设计 范式化设计背景 范式是数据表设计的基本原则,又很容易被忽略。很多时候,当数据库运行了一段时间之后,我们才发现数据表设计得有问题。重新调整数据表的结构,就需要做数据迁移,还有可能影响程序的业务逻辑…

Linux中的动静态库

目录 一、静态库 (1)静态库的优缺点: (2)Linux下静态库的创建和执行 1.直接编译​编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 (1)动态库的优缺点 &#xff…

达梦数据库将DMHR模式下的表(迁移)导出为EXCEL文件

数据库迁移工具(Data Transfer Service)位于/dm8/tool/dts.其中/dm8是数据库安装目录。 在创建数据库时我们如果勾选了 “创建示例库DMHR(R)”,数据库实例中就带有这个数据库。 这里是用MobaXterm客户端远程控制ip地址为192.168.148.130的虚…

自动化测试环境搭建--Linux内网环境【实操经验】

环境信息 Python版本3.6.8 Jenkins版本2.346.3 Allure版本 2.13.2 环境准备 一、Python需要安装库 allure-pytest (2.13.2) pytest (7.0.1) jsonpath (0.82.2) pytest-html (3.2.0) pytest-ordering (0.6) …

数据分析-Pandas数据y轴双坐标设置

数据分析-Pandas数据y轴双坐标设置 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网(internet)互联网(Internet)互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

EasyExcel的使用

1、简介 在日常项目开发中,经常会遇到解析excel文件中的数据、或者将某些数据导出成excel文件的需求,目前Java解析、生成Excel比较有名的框架有Apache POI、jxl,但是它们都存在一个严重的问题就是非常的耗内存。POI有一套Sax模式的API可以在一…

【k8s 高级调度--亲和力/反亲和力】

1、亲和性/反亲和性介绍 nodeSelector 提供了一种最简单的方法来将 Pod 约束到具有特定标签的节点上。 亲和性和反亲和性扩展了你可以定义的约束类型。使用亲和性与反亲和性的一些好处有: 亲和性、反亲和性语言的表达能力更强。nodeSelector 只能选择拥有所有指定…

数电票又增新票种 百望云率先推出机动车数电票解决方案

经过两年多的试点推广,数电票工程已经覆盖全国大部分省区市(含计划单列市),随着系统建设的深入,不仅是应用功能逐渐完善,对票种的支持也走向全面。 2023年11月天津市正式开启机动车数电票的开具功能&#x…

2024高频前端面试题 Vue2 和 Vue3 篇

* Vue2 和 Vue3的区别: 1)双向数据绑定原理的区别 2)根节点的不同 Vue2只能一个根节点 Vue3在组件中可以放置多个根节点 3)Vue3中采用composition API vue2:采用的选项型API(opsition API) vue3:采用的组合型API(composition A…

分享76个Html杂七杂八模板,总有一款适合您

分享76个Html杂七杂八模板,总有一款适合您 76个Html杂七杂八模板下载链接:https://pan.baidu.com/s/1ZQ16JmRiwgxlvDq9Vi41uA?pwd8888 提取码:8888 学习知识费力气,收集整理更不易。知识付费甚欢喜,为咱码农谋福…

网络进程:广播、组播、流式域、报式域(套接字)

1.广播 1.1广播发送端模型(类似UDP客户端) 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//将套接字设置成允许广播i…

cmd模式下启动mysql

1.打开cmd输入services.msc&#xff0c;找到MYSQL&#xff0c;右击属性&#xff0c;找到可执行文件路径&#xff0c;加载到环境变量。 2.打开cmd&#xff0c;启动MYSQL&#xff1a;输入net start mysql; 3.登陆MYSQL&#xff0c;需要管理权限&#xff1b; 输入&#xff1a;my…

【OBS】stream-labs-desktop 编译运行采坑全攻略

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ 安装yarn安装 2️⃣ 安装依赖库&#xff1a;yarn installcertificate has expiredelectronnpm:25.9.3 couldnt be built successfully 3️⃣ 启动desktop项目编译调试模式启动启动缓慢问题 4️⃣ 打包&#x1f6ec; 文章小结…

sentinel docker 基础配置学习

1&#xff1a;去官网下载 Releases alibaba/Sentinel GitHub 2&#xff1a;保存到linux 3&#xff1a;编写dockerfile FROM openjdk:8-jreLABEL authors"xxx" #第二步创建一个文件夹Z RUN mkdir /app #第三步复制jar 到app 下 COPY xxxxxx-1.8.7.jar /app/#第四…

动态规划(算法竞赛、蓝桥杯)--背包DP求具体方案

1、B站视频链接&#xff1a;E20 背包DP 求具体方案_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N1010; int v[N],w[N]; int f[N][N],p[N][N];int main(){int n,m;cin>>n>>m;for(int i1;i<n;i)cin>>v[i]>>w[i…

云计算 3月5号 (DNS域名解析及部署)

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。…

UD效果广告

1.定义 全称Unidesk&#xff0c;是由阿里旗下大数据运营平台“阿里妈妈”推出的数字营销引流平台。UD投放将其他媒体的流量通过相关的广告创意导入到天猫店铺。 2.UD投放优化技巧 &#xff08;1&#xff09;不起量排查&#xff1a; 可以从账户问题、计划数量不足、计划设置…