你的位置: 首页 > 新闻博客 > 技术博客

开源Black Shark 黑鲨图形引擎

2024-04-13 20:29:12

Black Shark Graphics Engine 是一个简单的 2D 和 3D 引擎编写 在 Pascal 中,开发人员可以利用硬件加速来生成应用程序 图形。它支持 Lazarus (v. >= 2.0) 和 Delphi。


这是一个年轻的、免费的项目,目前 在 2D 领域具有发展向量。此外,如果您愿意,您可以创建 3D 对象(请参阅测试示例 TBSTestMesh、TBSTestEarth 单位 bs.test.mesh.pas)。 该项目的一个主要目的是为简单的 访问版本 >= ES2 中的 OpenGL API 功能。



平台

  • Windows
  • Linux操作系统
  • Ultibo
  • 树莓派操作系统



总结


  • 核心:

    • 渲染器基于 OpenGL ES 2.0 API;对于访问 OpenGL 上下文,使用来自 Google 项目的库 Angle;
    • 几乎所有的事件和动画都基于观察者模式;
    • 2D 和 3D 世界之间没有区别;2D 对象绘制在最近的 视锥体平面;如果只想使用纯 2D 世界,可以设置 TBlackSharkFrustum.OrtogonalProjection 在 True 中,允许避免很少的扭曲对象;
    • 所有输入事件(键盘、鼠标)的窗口系统基于 Delphi 和 Lazarus 中的组件库(VCL/FMX 和 LCL 适当),但是, 如果需要,可以替换其 (bs.viewport.TBlackSharkViewPort) 在自己的窗户系统上;
    • 纯 Black Shark 应用程序(参见示例 “/tests/delphi/BSApplication” 和 “/tests/lazarus/BSApplication”);Delphi 也支持它进行 Linux 目标编译;
    • 自己的 Windows 系统(通过“BSApplicatoin”中的命令行参数参见示例“bs.test.windows.TBSTestWindows”);
    • 它有一个用于创建任何 2D 对象的画布;
    • 任何图形对象(2D 或 3D)都可以是交互式的;
    • 一个简单的光栅化器用于加载纹理和绘制RAM中的基元(例如,用于字体光栅化);
    • 自己的字体系统不依赖于操作系统;
    • 针对许多子系统的一组视觉测试;

  • 字体:

    • 支持从文件加载的字体 TrueType *.ttf,适当地可以 加载任何轮廓 TrueType,例如微笑(表情符号);
    • 它有自己的 TrueType 字体加载器,可以完成三角测量和光栅化 (无需使用外部工具);
    • 字符仅由网格输出(允许获得大符号的良好质量);
    • 从纹理输出的字符(允许获得相对良好的小符号质量) 事先由光栅化器准备;纹理仅包含 alpha (GL_ALPHA),这就是为什么字体可以保留非常大的原因 纹理;
    • 支持混合模式(使用特殊类 TTrueTypeRasterFont) 允许自动显示字体大小的较小阈值 从纹理,如果大小更大,则从网格显示阈值;
    • 用于在消费者之间共享和管理生命周期的字体具有自动功能 参考计数;

  • 纹理:

    • 支持 tga、png(用于负载使用工具 Delphi 和 FPC);添加起来很容易 支持新格式;
    • 对于消费者之间的共享和管理生命周期纹理具有自动功能 参考计数;

  • 几何实例化:

    • 实现软件实例化,即为每个 实例调用 glDrawElements,因为存在硬件支持 仅在 GLES 3.0 中;在未来计划的硬件实现中, 因为只会向 Angle 项目添加支持;

  • 粒子系统:

    • 实现通过单个调用 glDrawElements 绘制多个纹理粒子 对于所有粒子;每个粒子都是纹理的四边形,如果属性 TBlackSharkParticles。IsPoints 等于 false,否则为点;

  • 使用帮助着色器实现的全屏抗锯齿:

    • 快速近似 (FXAA);
    • 多重采样 (MSAA);
    • 超级采样 x4 (SSAA)(有助于渲染到比屏幕更多的纹理 在 2 次内进一步重新采样(当然是在 GPU 上)到视口大小; 在 Linux 中工作本机实现 (TODO: include 属性 EmbeddedSSAA 切换到 TBlackSharkViewPort);

  • 帆布:

    • 它有一个类 bs.canvas.TBCanvas,它是一组简单的 2d 对象 (TCanvasObject 的后代);
    • 画布具有缩放其对象相对于大小的缩放机制 视窗;
    • bs.canvas 单元包含一些基元的集合,如 line、circle、 圆弧、矩形、三角形、曲线等;
    • 画布具有可缩放模式,可在视口更改时自动缩放其对象;

  • 杂项:

    • 列表/堆栈;
    • 时间复杂度为 O(log n) 的二元平衡树 (AVL-tree) 所有操作:搜索、插入和删除;一个非常有用的属性: 所有值按键自动排序;
    • 在平均情况下时间复杂度为 O(1) 的哈希表;
    • 线程安全的 FIFO 队列(先进先出),不使用 OS 对象 用于同步;
    • 允许插入和删除到任何位置的双向列表 对于时间复杂度 O(1);一个具有光标,用于按索引访问项目;
    • 虚拟树适合任何分层数据,保存 并加载任何早期形成的结构;
    • 例如,有限状态自动机(机器)提出 Aho-Corasick 算法,允许快速找到所有 子字符串到输入数据流中;
    • 小而非常有用(恕我直言)通用集合:




安装

  • 下载源代码;
  • 解压缩到一个新目录,希望仅由拉丁字符组成;
  • 在 IDE 中设置搜索源的路径:目录的根目录、/common、/core、/gui;
  • 将输出可执行文件的路径设置为目录 /bin;
  • 对于 Win64,将文件替换为 libEGL.dll、libGLESv2.dll、opengl32.dll /bin/Win64 目录中的文件。


QQ在线咨询
售前咨询
0531-66900120
售后服务
13287796906
QQ在线咨询
售前咨询
0531-66900120
售后服务
13287796906