Skip to content
This repository has been archived by the owner on Feb 17, 2024. It is now read-only.

Releases: ShenMian/clementine

v0.0.1

27 Jul 05:27
Compare
Choose a tag to compare
v0.0.1 Pre-release
Pre-release

概述

该版本的框架和 v0.0.0 版本相比有着较大的改变, 变得更加现代和灵活. 添加了窗体, 不再仅支持终端窗口.

架构

  • Entity-Component-System. 前期使用第三方库 EnTT, 后期使用自带的 ECS.

构建

  • 使用 'CMake' 构建可执行文件.
  • 使用 'Premake5' 构建项目工程文件, 包括 gmake, Xcode, Visual Studio.
  • 在 'Script/' 中提供了若干脚本方便用户快速构建.

音频

  • 使用了第三方 OpenAL 添加了音频相关实现.
  • 支持 WAV 格式音频文件.
  • 支持 2D 空间音频, 多普勒效应.

渲染

  • 使用了第三方 OpenGL 作为渲染 API.
  • 使用了第三方 GLAD 作为多渲染 API 加载器.
  • 使用了第三方 GLFW 作为多平台窗口 API.
  • 使用了第三方 Dear ImGui 作为支持多渲染 API 的 GUI.

重大改变

  • 文件/文件夹命名规范改为大写字母开头.
  • 命令行下的实现被转移到了 Source/Clem/Rendering/Console 中.
  • Application 中大部分职责被分配到 Main 中, 只保留了应该具有的功能.
  • Entity 操作的实现都被分配到了 System 的派生类中, 由 Registry 统一管理.
  • 组件有新 ECS 系统管理, 不再继承于 Component.

详情请查看 Compare.

v0.0.0

17 Mar 15:02
Compare
Choose a tag to compare
v0.0.0 Pre-release
Pre-release

概述

该版本构建了一个大致的框架, 包含了一个游戏引擎必须具备的基本功能(外设输入除外). 为 v0.0.1 版本的开发做了充分的准备.

架构

  • 利用继承实现了一个简单的 Entity-Component-System.
    • Facor 扮演实体的角色.
    • Component 作为组件的基类. 从它派生出的类有 Rigidbody / Sprite .
  • Director 管理 Scene, Scene 管理 Factor.

构建

  • 使用了 CMake 来实现跨平台的构建工作.

输出

  • FrameBuffer 负责输出工作.
    • 在Unix下标准输出ANSI码.
    • 在Windows下使用WriteConsoleOutput(WinAPI), 以提高输出效率. 经测试, 若在支持ANSI码的Win10终端下执行, 120x30大小的窗口下大约5-6FPS. 而使用WinAPI在120x30大小的窗口下10000+FPS, 输出的效率和效果都得到了极大的提升.
    • 此部分的难点在于不同平台之间的具体实现差异较大.
    • 实现了双缓冲, 为后期实现多线程提供基础.

输入

该部分尚未实现. 因为外设(鼠标/键盘/游戏手柄)的输入在不同操作系统上差异过于巨大且没有找到单独提供输入功能的第三方库, 所以将该部分工作推迟到下一个版本.

入口点

  • Application 是用户程序的入口点. 用户将继承该类并实现相关虚函数. 引擎将在启动后调用用户实现的子类.

内置CPU抽样性能分析器

  • Profiler 是内置的CPU抽样性能分析器. 可用于分析 函数/指定几行代码 的执行效率. 分析结束后生成一份JSON格式的文档. 可以将其导入浏览器内的Tracing功能进行分析. 使用了宏对相关功能进行了封装, 使用十分简单.

随机数生成器

  • Random 负责生成指定大小的随机数.
  • 内部实现对std::mt19937进行了封装.
  • 使用了 std::uniform_int_distribution 作为分布对象, 以生成离散均匀分布随机数.

物理引擎

  • Rigidbody 作为刚体, 负责存储速度和加速度. 管理 Collider .
  • Collider 作为碰撞体, 具有碰撞体积, 负责碰撞检测. 从它派生出的子类有 BoxCollider / CircleCollider .
  • 碰撞检测的具体实现在 Collider 子类的 collides 函数中.

数学

  • Point 二维点, 用于表示位置信息(如实体的坐标).
  • Vec2 二维向量(矢量). 用于表示矢量信息(如实体的速度加速度属性).
  • Size 二维大小, 用于表示二维矩形的大小(比如控制台窗口大小).
  • Rect 矩形, 可计算矩形之间是否存在交集.

摄像机

  • Camera 表示玩家视口. 将出现在 视口(Viewport) 内的 Sprite 渲染到 FrameBuffer 中.

日志

  • Log 负责记录日志. 该部分仅对第三方spdlog进行了简单的封装.