推荐10个小而美的优质 WebGL 库

推荐10个小而美的优质 WebGL 库大家好 很高兴又见面了 我是 高级前端进阶 由我带着大家一起关注前端前沿 深入前端底层技术 大家一起进步 也欢迎大家关注 点赞 收藏 转发 今天给大家带来的主题是 推荐 10 个小而美的 WebGL 库 话不多说 直接

大家好,欢迎来到IT知识分享网。

大家好,很高兴又见面了,我是”高级前端进阶“,由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

推荐10个小而美的优质 WebGL 库

今天给大家带来的主题是“推荐10个小而美的 WebGL 库!”,话不多说,直接进入正题!

PixiJS

PixiJS 是一个渲染库,可让开发者创建丰富的交互式图形以及跨平台应用程序和游戏,而无需深入研究 WebGL API 或处理浏览器和设备兼容性。PixiJS 具有完整的 WebGL 支持,并在需要时无缝回退到 HTML5 的画布。

作为一个框架,PixiJS 是创作交互式内容的绝佳工具,尤其是在近年来逐渐放弃 Adobe Flash 的情况下,可将其用于图形丰富的交互式网站、应用程序和 HTML5 游戏

推荐10个小而美的优质 WebGL 库

PixiJS 开箱即用、跨平台兼容和优雅的降级意味着开发者要做的工作更少,而且乐趣更多。总之,PixiJS 项目旨在提供一个可在所有设备上运行的快速、轻量级 2D 库。 PixiJS 渲染器让每个人无需具备 WebGL 知识即可享受硬件加速的强大功能。而且,PixiJS 很快。

目前 PixiJS 在 Github 上通过 MIT 协议开源,有超过 41.3k 的 star、4.8k 的 fork、800+ 的项目依赖量、贡献者 500+,妥妥的前端优质开源项目。

PlayCanvas

PlayCanvas 是基于 WebGL 和 glTF 构建的快速、轻量级 JavaScript 游戏引擎,已经被视频游戏、广告和可视化领域的领先公司所使用,例如:Animech、Arm、宝马、迪士尼、Facebook 等等。

推荐10个小而美的优质 WebGL 库

PlayCanvas 的典型特征包括:

  • 图形 – 基于 WebGL 1 和 2 构建的高级 2D + 3D 图形引擎。
  • 动画 – 针对角色和任意场景属性的强大的基于状态的动画
  • ⚛️ 物理 – 与 3D 刚体物理引擎 ammo.js 完全集成
  • 输入 – 鼠标、键盘、触摸、游戏手柄和 VR 控制器 API
  • 声音 – 基于 Web Audio API 构建的 3D 位置声音
  • Assets – 基于 glTF 2.0、Draco 和 Basis 压缩构建的异步流系统
  • 脚本 – 用 Typescript 或 JavaScript 编写游戏行为

目前 PlayCanvas 在 Github 上通过 MIT 协议开源,有超过 8.7k 的 star、1.3k 的 fork、贡献者 200+,是一个优质的前端开源项目。

regl

regl 通过删除尽可能多的共享状态来简化 WebGL 编程。 为此,它用两个基本抽象、资源和命令替换了 WebGL API。

  • 资源:是 GPU 驻留对象的句柄,例如:纹理、FBO 或缓冲区。
  • 命令:是执行某些绘制调用所需的 WebGL 状态的完整表示。

要定义命令,需要为对象指定静态和动态数据的混合。 完成此操作后,regl 会获取此描述,然后将其编译为优化的 JavaScript 代码。

推荐10个小而美的优质 WebGL 库

regl 具有以下特点:

  • 界面简洁并强调关注点分离,删除共享状态有助于本地化代码的效果和交互,使其更容易推理。
  • regl 拥有超过 30,000 个单元测试和 95% 以上的代码覆盖率。 在开发模式下,regl 对所有输入数据执行强大的验证和健全性检查,以帮助更快地捕获错误。
  • regl 使用动态代码生成和部分执行来消除几乎所有开销。
  • regl 只是包装了 WebGL,不是游戏引擎,对场景图或向量数学库同样支持。 WebGL 中的任何功能都可以访问,包括高级扩展,例如多个渲染目标或实例化。
  • regl 非常重视接口兼容性和语义版本控制,使其非常适合长期存在的应用程序。

目前 regl 在 Github 上通过 MIT 协议开源,有超过 5k 的 star、20k 的项目依赖量、贡献者 50+,妥妥的前端优质开源项目。

twgl.js

WebGL 有非常冗长的 API,包括:设置着色器、缓冲区、属性和 uniform 需要大量代码。 WebGL 中的一个简单的光照立方体可以轻松达到对 WebGL 进行 60 多个调用。

TWGL 试图通过提供一些辅助函数来使 WebGL 变得更简单、简洁。 TWGL 并不是试图帮助解决管理着色器和编写 GLSL 的复杂性,也不非像 Three.js 的 3D 库。

TWGL 可以被认为是 TDL 的继承者, TDL 创建了几个包装 WebGL 的类,而 TWGL 则尝试不包装任何内容,却支持手动创建几乎所有 TWGL 数据结构。

twgl.js 核心只有以下几个主要功能:

  • twgl.createProgramInfo :编译着色器并为属性和 uniform 创建设置器
  • twgl.createBufferInfoFromArrays: 创建缓冲区和属性设置
  • twgl.setBuffersAndAttributes: 绑定缓冲区并设置属性
  • twgl.setUniforms :设置 uniform
  • twgl.createTextures: 创建各种类型的纹理
  • twgl.createFramebufferInfo 创建帧缓冲区和附件。

当然,如果需要的话,还有一些额外的帮助程序和底层函数,但这 6 个函数是 TWGL 的核心。

目前 twgl.js 在 Github 上通过 MIT 协议开源,有超过 2.5k 的 star、1.3k 的项目依赖量、贡献者 30+,是一个值得关注的前端优质开源项目。

OGL

OGL 是一个小型、有效的 WebGL 库,面向喜欢最少抽象层并对创建自己的着色器感兴趣的开发人员。

该 API 采用零依赖的 es6 模块编写,与 ThreeJS 有许多相似之处,但它与 WebGL 紧密耦合且功能少得多。

在其设计中,OGL 做了最少的必要抽象,因此开发人员仍然可以放心地将其与本机 WebGL 命令结合使用。保持较底层的抽象级别有助于使库更易于理解和扩展,并且使其作为 WebGL 学习资源更加实用。

为了保持 OGL 简洁和模块化,该库分为三个部分:Math、Core 和 Extras。Math 组件是 gl-matrix 的扩展,提供可实例化的类,为每个模块类型扩展 Array, gzip 压缩后 8kb,没有依赖关系,可以单独使用。

Core 由以下部分组成:

  • Geometry.js
  • Program.js
  • Renderer.js
  • Camera.js
  • Transform.js
  • Mesh.js
  • Texture.js
  • RenderTarget.js

任何 Extras 抽象层都将作为附加项包含在内,而不是核心的一部分,以减少膨胀。 它们提供了广泛的功能,从简单到高级。

目前 OGL 在 Github 上通过 MIT 协议开源,有超过 3.3k 的 star、1k 的项目依赖量、贡献者 30+,是一个值得关注的前端优质开源项目。

lightgl.js

lightgl.js 使快速构建 WebGL 应用程序变得更加容易。

lightgl.js 的级别比许多其他 WebGL 库要低,虽然它不提供场景图,但它重新实现了 OpenGL 的模型视图/投影矩阵堆栈以提供类似的功能。 它还重新引入了 GLSL 中的一些内置 uniform(例如 gl_Vertex 和 gl_ModelViewProjectionMatrix)和 OpenGL 的即时模式。

目前 lightgl.js 在 Github 上通过 MIT 协议开源,有超过 1.5k 的 star、1k 的项目依赖量、是一个值得关注的前端优质开源项目。

SwissGL

SwissGL 是 WebGL2 JS API 之上的简约包装器,旨在减少进行 GPGPU 式程序可视化或模拟时管理 GLSL 着色器、纹理和帧缓冲区所需的样板代码量。 截至目前,该库由一个独立的 <1000 loc .js 文件组成。

SwissGL 不是 Google 官方支持的产品,只是一个早期实验,不完整且不稳定。

目前 SwissGL 在 Github 上通过 MIT 协议开源,有超过 1.1k 的 star、是一个值得关注的前端优质开源项目。

picogl.js

PicoGL.js 是一个最小的 WebGL 2 渲染库,适用于了解 WebGL 2 渲染管道并希望使用它的开发人员,同时具有非常简单的 API。

PicoGL.js 的典型用法将涉及创建程序、顶点缓冲区、顶点数组、统一缓冲区、帧缓冲区、纹理、变换反馈,以及将它们组合到绘制调用中。

需要注意的是,PicoGL.js 不是场景图形库。 没有对象、层次结构、变换、材质等,它的设计只是为了使 GPU 状态的管理更加方便,概念模型相当直接地映射到直接使用 WebGL 2 API 编写时所处理的构造。 唯一的高级构造是绘制调用,管理相关的较低级构造集。

目前 PicoGL.js 在 Github 上通过 MIT 协议开源,有超过 0.9k 的 star、是一个值得关注的前端开源项目。

litegl.js

Litegl.js 是一个包装 WebGL 的库,通过创建用于管理不同项目(如缓冲区、网格、纹理、着色器和任何 WebGL 应用程序的其他常见方面)的类,使其更加用户友好。

Litegl.js 有助于简化 WebGL 的使用,无需处理所有底层调用,但又不会失去任何自由。Litegl.js 的典型特点包括:

  • 轻松创建上下文,支持:网格和缓冲区、纹理、着色器
  • 一些基本的原始形状(平面、立方体、球体、圆柱体、半球体)。 OBJ 解析器和编码器(易于添加新的)
  • 来自 URL 的图像和网格的加载器(在加载之前使用占位符)
  • 一切都使用类型化数组(所有操作都使用 glMatrix)
  • 不产生垃圾(重复使用容器)
  • 基本光线追踪(适用于光线球体、光线 aabb、光线平面和光线网格)
  • 活动系统,鼠标、键盘和游戏手柄的跨浏览器输入处理
  • 支持多个 WebGL 上下文、支持 WebGL1 和 WebGL2

目前 Litegl.js 在 Github 上通过 MIT 协议开源,有超过 0.4k 的 star、是一个值得关注的前端开源项目。

参考资料

https://github.com/regl-project/regl

https://github.com/greggman/twgl.js

https://github.com/oframe/ogl

https://github.com/evanw/lightgl.js

https://github.com/pixijs/pixijs

https://github.com/playcanvas/engine

https://github.com/tsherif/picogl.js

https://github.com/google/swissgl

https://github.com/jagenjo/litegl.js

https://pjbelo.medium.com/introduction-to-3d-in-html5-with-webgl-and-three-js-38565aa689c

https://aralroca.com/blog/first-steps-in-webgl

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/97088.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信