https://zhuanlan.zhihu.com/p/466830308
自己写个游戏引擎,这是个有趣的工程实践,vulkan的设备覆盖率已经非常高了。android 7.0以上的设备占比75%左右,iphone 6以上设备90%左右,桌面平台基本都支持,可以预见是个高收益的渲染接口。鉴于本人精力有限才疏学浅,我仅支持vulkan渲染接口,如OpenGL是不支持的。在工程组织方面,考虑良久,最终选择直接使用原始IDE工程,下载完毕即可打开编译调试,最大限度避免卡环境卡编译。
支持平台:android、iOS、macOS、window
开发语言:c语言为主,辅以c++、java和oc
扣扣交流群:554329899
已有功能和部分特点:
0.跨平台c语言基础工具集。
1.线性代数数学库,定点数,伪随机数。
2.信号槽组件EventSet。
3.属性集组件PropertySet。
4.跨平台系统常用接口抽象层nwsi。
5.基础的vulkan工具,简化接口使用。
6.gltf解析和加载,基本款pbr。
7.小型的GUI组件,支持控件样式和主题皮肤。
8.用FreeImage支持多种图片格式png、jpeg等。
9.支持压缩纹理basis和压缩模型draco。
a.完善的构建系统,可直接打出多平台发布包。
b.一套tcp基本cs网络,一套前向纠错udp网络。
c.大部分使用c语言,编译速度快便于调试。
d.小型的音频播放组件,支持mp3,ogg,wav。
特别说下nwsi。该系统相当于glfw但是功能上多了文字排版组件,并且有更细腻的输入法接口。
1.系统事件:鼠标、多点触控、按键,输入法等。
2.文字排版系统使用系统原生接口抽象,免字库。
3.嵌入式设计更轻量,尽量不破坏宿主工程结构。
4.该系统可以剥离vulkan独立工作,方便拓展。
GUI为保留式设计,主要参考cegui、cocos2dx。使用TexturePackage作为图集打包工具。使用类似qt绑定回调函数的方式完成界面逻辑编写。
仓库并不是一个,而是一系列,可自行选用
https://bitbucket.org/mm_longcheng
mm-make dev分支 工程编译多平台脚本工具
mm-libx dev分支 第三方依赖库构建
mm-core dev分支 多平台接口抽象工具集
mm-nes dev分支 可选的nes模拟器内核
mm-vulkan dev分支 vulkan测试工程
mm-nes是可选的,mm-vulkan工程临时用到这个库,整合过来纯粹就是好玩,正式完成会去掉依赖。mm-libx可以单独使用,构建你自己的依赖。
需要环境变量 MM_HOME=<指向检出的以上四个库的主目录>
编译
mm-libx 下面运行脚本 script/compile/compile_<需要的平台>
mm-core 下面运行脚本 script/compile/compile_<需要的平台>
mm-nes 下面运行类似地址的脚本
编译的时候注意看一下mm-libx下面的readme.txt,避免出现常见编译问题,遇到问题也可以加群问我。
工程结构不采用cmake这些外部构建,而是直接使用原始ide工程,需要IDE版本支持:
1.windows需要visual studio 2017以上 最小支持 win 7 仅有64位版本
2.xcode需要 xcode Version 12.5.1 以上 最小支持 macos 10.12 ios 12.1
3.android 需要android studio NDK ndkVersion '21.4.7075529' 最小支持 minSdkVersion 24
一旦依赖库编译完毕,直接打开对应ide的工程打开即可调试打包。
以下展示ui系统,过程式生成模型,动画系统
以下展示构建界面逻辑的基本套路