GameMachine是一款小巧的图形渲染引擎。
安装3.9.0以上版本的CMake,并构建Coding下的CMakeLists.txt。
- 直接构建release,并将media/gm.pk0、media/gm.pk1拷贝到release目录下,可以运行程序。
- 如果运行debug,请将media/gm.pk0用WinRAR等压缩工具解压到D:/gmpk;将media/gm.pk1解压到D:/gmpk1
- 对于没有安装DirectX11的环境的机器,可以将CMake中的GM_USE_DX11开关关闭,这样将编译没有DirectX11的渲染环境。
由于用到了诸多C++11/14的特性,只能使用VS2015及以上的版本编译
你需要安装一下依赖:
- sudo apt-get install build-essential
- sudo apt-get install libgl1-mesa-dev
- sudo apt-get install libglu-dev
- sudo apt-get install language-pack-zh-hans
- **当安装完以上依赖后,使用CMake构建,即可完成编译。
在Respberry Pi下的构建方法:
- 除了按照Linux上述方法安装依赖之外,还需要在CMake中指定GM_RESPBERRYPI=TRUE。
Respberry Pi将禁止以下特性:
- 法线贴图
- PBR
- 延迟渲染
- Geometry Shader Respberry Pi仅支持单光源。
- GameMachine库会提供静态版本(如lib)和动态版本(如dll)
- 在CMake中指定GM_USE_DX11,将会构造出带DirectX11的GameMachine版本。此时请确保机器装有DirectX11 SDK。带DirectX11的GameMachine将采用带SIMD实现的线性代数库。
- 若CMake未指定GM_USE_DX11,构造出的GameMachine将会采用非SIMD实现的线性代数库(具体优化取决于编译器)。此外,它会生成gamemachinedx11.dll,将它与gamemachine.dll放在一起,若用户有DirectX11环境,则将用DirectX渲染,否则以OpenGL渲染。
- 如果用户拥有DirectX11环境,则建议使用GM_USE_DX11构造,它会得到更好的优化。若以兼容性为主,则不必以GM_USE_DX11构造,并请将gamemachinedx11.dll提供给用户。 注意:只有使用gamemachine.dll时gamemachinedx11.dll才会有可能被加载。当用户使用静态版本的非GM_USE_DX11的GameMachine时,gamemachinedx11.dll不会被加载。
-
底层功能
- 提供跨平台渲染环境。提供DirectX、OpenGL两种方式。
- 提供跨平台数学库。提供基于DirectX数学库和glm的数学库,支持SIMD。
- 提供跨平台的多种设施,如窗口创建、消息循环、内存池、渲染文字等。
- 提供资产管理器。
- 提供平台无关渲染流水线。
- 提供部分反射机制。
- 提供Lua类的封装,可以轻松对接Lua。
- 提供可扩展接口,可以之后支持Vulkan及其它渲染引擎。
- 提供可扩展渲染,可以加入自己的渲染过程,实现自定义渲染。
- 提供键盘、鼠标、手柄消息封装等。
- 声音播放封装。
- UI控件及完备的事件机制。
- GPGPU计算框架。
- 其它功能。
-
集成的渲染功能
- 基本渲染,图元、纹理绘制(顶点绘制,索引绘制)。
- 法线贴图、高光贴图。
- Phong光照模型,点光源,方向光,聚光灯。
- PBR渲染。
- 读取模型,如obj,md5等。
- 阴影贴图,CSM。
- 物理碰撞。
- 粒子系统。
- Billboard效果
- 延迟渲染。
- 骨骼动画。
- UI控件。
- 文字渲染。
- 抗锯齿渲染。
- 其它功能。
每一个渲染功能,GameMachine都提供了一个详细的demo来演示。
因本人能力有限,无法做到尽善尽美,欢迎大家一起来提升和改进GameMachine。以下是GameMachine文件夹下的目录结构:
- extensions: 扩展功能。扩展功能是没有放在GameMachine主要功能中的一些功能模块。
- 雷神之锤3的BSP文件的读取。并且,demo中还实现了雷神之锤3的场景的渲染和人物的移动。你可以用手柄或者键盘来移动玩家。
- Gerstner波,模拟水面。
- foundation: 基本框架,如主程序流程、工具类、字符串类、基本定义等。
- gmdata: 数据相关类,如解析图片、解析模型、模型数据结构等。
- gmengine: 渲染流水线的实现。它目前具体由gmgl和gmdx11实现。
- gmdx11: DirectX 11 相关渲染的实现。
- gmgl: OpenGL 相关渲染实现。
- gmlua: GameMachine对Lua的封装的相关实现。里面提供了Lua来操控GameMachine内部对象的很多方法。gamemachineluademo中有详细的demo。
- gmphysics: GameMachine物理引擎的实现。主要是封装了bullet3。
GameMachine Premiere 是一个用GameMachine引擎制作的CG Demo。 它可以将GameMachine中应用的一些渲染技术播放出来。
GameMachine Premiere的代码存放在src/demo/premiere中。 它主要是通过自己的时间轴解析器(timeline.h, timeline.cpp),来解析时间轴xml文件。时间轴中定义了所用到的资源,它们出现的时间,动画的插值方式等,具体的时间轴文件存放在media/premiere/scripts中。
编译好GameMachine Premiere之后,同GameMachine Demo类似:
- 直接构建release,并将media/gm.pk0拷贝到release目录下,将media/premiere中的所有文件打包zip格式,并改名为gm.pk1,放到release目录下,便可以运行程序。
- 如果运行debug,请将media/gm.pk0用WinRAR等压缩工具解压到D:/gmpk;将media/premiere中的所有文件放到D:/gmpk1中,便可运行程序。