OpenGL渲染引擎-设计与实践

马尚
• 阅读 99

OpenGL(Open Graphics Library)是一个跨平台、跨语言的图形编程接口(API)。它被广泛用于实现2D和3D图形渲染,并且是许多应用程序、游戏和网页浏览器的核心组件(/s/1BTM5PjAAOpeQFP-a5IO0VA 提取码:p9bg )。

一、OpenGL的主要特性

  1. 低层次的渲染 API:OpenGL 提供了直接与图形硬件进行交互的能力。这使得它非常强大,因为它可以充分利用图形处理器(GPU)的性能。然而,这也意味着使用 OpenGL 需要对计算机图形学有深入的理解。

  2. 状态机:OpenGL 是一个状态机,这意味着你可以通过一系列的函数调用来改变它的内部状态,然后这些状态会影响后续的渲染操作。

  3. 可扩展性:OpenGL 的一个重要特性是它的可扩展性。硬件制造商可以为他们的硬件特性定义新的 OpenGL 函数和参数。这些扩展可以通过 OpenGL 的扩展机制被查询和使用。

  4. 跨平台和跨语言:OpenGL 可以在所有主要的操作系统(如 Windows、macOS 和 Linux)上运行,并且有各种编程语言的绑定,包括 C、C++、Python、Java 和许多其他语言。

  5. 显示列表和着色器:OpenGL 提供了两种主要的方式来指定如何渲染图形。一种是通过使用显示列表来指定一系列的顶点和参数。另一种是通过使用着色器,这是一种在 GPU 上运行的小程序,可以控制图形的最终颜色和位置。

二、OpenGL 设计结构 如果用一句话来描述 OpenGL 的话,我想应该是基于C/S结构设计的模板模式(设计模式里的那个);在 图形渲染管线 这节,主要介绍的是其模板设计,在 OpenGL 里我们称之为 PipeLine;在 C/S结构 这节,则介绍 OpenGL C/S 结构给 OpenGL 带来的一些对于初学者看起来可能觉得奇奇怪怪的东西.

三、核心模式与立即渲染模式: 早期OpenGL使用立即渲染(Immediate mode,也就是固定渲染管线)容易使用和理解,但是效率太低。从OpenGL3.2开始废弃立即渲染模式,鼓励使用核心模式(Core-profile)。 核心模式:要求使用者真正理解OpenGL和图形编程,有一些难度,然而提供了更多的灵活性,更高的效率,可以更深入理解图形编程。 扩展: OpenGL的一大特性就是对扩展(Extension)的支持,当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。 状态机: OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

四、OpenGL和DirectX哪个好 选择OpenGL还是DirectX取决于你的具体需求和目标平台。 OpenGL的优点包括: 成为绘图引擎的标准,绘图质量高,编程相对复杂但上手简单,适合追求完美的绘图精确度。 跨平台支持,可以在多个操作系统上使用,包括Windows、Linux和Mac等。 易于学习和使用,特别是对于初学者来说,OpenGL的C语言接口相对简单。 提供了各种辅助库,可以用于往其他设备上输出数据,如打印机。 向下兼容性好,高版本的OpenGL程序如果不使用新特性,可以容易地改用在低版本的机器上运行。

DirectX的优点包括: 专为游戏而生,绘图精度满足一般游戏的所需,包含了不少用来在游戏中处理其他数据的辅助库,包括声音数据、输入输出等。 主要使用C++编程语言,更适合利用面向对象的特性进行开发。 提供了一整套用于游戏开发的API,包括Direct3D用于3D图形渲染、Direct2D用于2D图形渲染等。 与Windows紧密相连,难以移植,但提供了强大且方便的IDE和GPU语言调试工具。

五、OpenGL就业前景 图形学基础知识本来就不多,而且没有太大变化,就是很多特效可能时不时出一个新论文,但实际变化不大。如果你单纯学点图形学会点opengl dx,就想很容易找到工作,那是不现实的:要每天都玩图形学,一般都进显卡公司,图形芯片研发,渲染架构算法验证,图形驱动开发,就比如基础的驱动开发,你至少要会写windows驱动,光学图形学肯定没用。

要做游戏,游戏引擎甚至需要的图形学知识很少,基础图形学完全足够,游戏引擎更着重的是全套工具链和细节性能优化,尤其是全套工具链,游戏开发需要很多各种功能,场景编辑 动画 骨骼 地形天空 基础特效光照粒子系统 资源管理 状态机行为树 性能监控调试 drawcall调试 格式转换导入 插件 脚本等等。游戏开发大部分都是体力活,除非是细节特效,可能需要图形学专业点写高性能shader。

从学习的角度来看,opengl有着足够好的教程,并且从上手难度来说opengl是比较好上手的,能够快速让你得到正反馈并且继续学下去。有了一定基础后续学习现代图形API也可以更快上手。

从就业的角度来看,opengl现在在就业市场上还是有着不少的岗位的。但是现代图形API是大势所趋,后续应该会有更多的岗位,如果为了就业学opengl没问题,不过最好也一边学习现代图形API

点赞
收藏
评论区
推荐文章
Stella981 Stella981
2年前
Android 图形驱动初始化
从应用程序的角度看OpenGL图形系统的接口,主要包括两大部分,一部分是EGL,它为OpenGL渲染准备环境;另一部分是OpenGL,它执行图形渲染。通过这些接口构造渲染环境,并执行渲染的过程,可以参考在Android中使用OpenGL(https://www.oschina.net/action/GoToLink?urlhttp%
Stella981 Stella981
2年前
Introduction to 3D Game Programming with DirectX 11 翻译
Direct3D11简介Direct3D11是一个渲染库,用于在Windows平台上使用现代图形硬件编写高性能3D图形应用程序。Direct3D是一个windows底层库,因为它的应用程序编程接口(API)可以很好地非常接近于它控制的底层图形硬件。她最主要的客户是游戏行业,游戏需要建立在Direct3D上的更高级的渲染引擎来实现。但是,其他行
Wesley13 Wesley13
2年前
VS2010配置OpenGL开发环境
最近开始研究OpenGL了,下面是网上看到的一篇入门VS2010上环境配置的文章OpenGL(OpenGraphicsLibrary)是一个跨编程语言、跨平台的专业图形程序接口。   OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循O
Stella981 Stella981
2年前
Android 图形系统概述
Androidframework为2D和3D提供了各种各样的图形渲染APIs来与设备制造商的图形驱动实现交互,因此对于那些API在上层如何工作有一个好的理解非常重要。这一页介绍驱动基于其构建的图形硬件抽象层(HAL)。应用程序开发者以两种方式将图像绘制到屏幕上:通过Canvas或OpenGL。参考 系统级图形架构(https
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
马尚 马尚
1个月前
QT6实战-QML与C++联合编程
一、QT概述(参考文献:panbaiducom/s/1K625sJ4j2vfr0Avnswmo4A提取码:kql2)Qt是1991年由HaavardNord和EirikChambeEng开发的跨平台C图形用户界面应用程序开发框架。发展至今,它既可以开发
笑面虎 笑面虎
6个月前
系统玩转OpenGL+AI,实现各种酷炫视频特效
系统玩转OpenGLAI,实现各种酷炫视频特效视频课程分享——系统玩转OpenGLAI,实现各种酷炫视频特效,附源码。大家下载学习。OpenGL(英语:OpenGraphicsLibrary,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢
京东云开发者 京东云开发者
5个月前
Skia 编译及踩坑实践
本文要点•了解并入门Skia、OpenGL和Vulkan•了解Skia在后端渲染上的坑点前言Skia是什么Skia是一个开源2D图形库,提供可跨各种硬件和软件平台工作的通用API。它充当GoogleChrome和ChromeOS、Android、Flutt
笑面虎 笑面虎
5个月前
OpenGL-自主高性能三维GIS平台架构与实现(第2季)
OpenGL自主高性能三维GIS平台架构与实现(第2季)给大家分享一套课程——OpenGL自主高性能三维GIS平台架构与实现(第2季),附源码。大家下载学习。OpenGL(英语:OpenGraphicsLibrary,译名:开放图形库或者“开放式图形库”)
光之守卫 光之守卫
2个月前
系统玩转OpenGL+AI,实现各种酷炫视频特效
系统玩转OpenGLAI,实现各种酷炫视频特效download》itzcw.com/9126/OpenGLAI的介绍OpenGL(OpenGraphicsLibrary)是一种用于渲染2D和3D矢量图形的跨平台图形库。它提供了一组函数,允许开发人员在不