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系统,过程式生成模型,动画系统

以下展示构建界面逻辑的基本套路

用vulkan写个引擎 (一)综述相关推荐

  1. 用vulkan写个引擎 (二)vk组件

    这篇文章开始展开介绍工程的组织方式和组件模块.首先从vulkan组件开始.大部分文章都是把官网例子重复一遍,或是罗列接口说明,根本不足以用在生产环境. 注意,文章主要表述组件的功能和要点,和它们之间的 ...

  2. 用vulkan写个引擎 (三)ui组件

    ui组件也许是最令人着迷的部分.这部分最复杂的要数文字排版系统,比较重要的部分分别是属性集部件,信号槽部件,布局系统.相对复杂的部分是图片顶点数据拼装,和系统事件处理. 仓库:https://bitb ...

  3. 用vulkan写个引擎 (四)PBR着色器

    PBR全称(Physicallly-Based Rendering),基于物理的渲染.本文将提供一份GLSL实用型着色器.对于理论部分网络上已经有太多文章了. 仓库:https://bitbucket ...

  4. 一个简单有效的手写识别引擎

    实现一个手写识别引擎有多复杂困难?那就要看你使用什么算法啦. 在开源库中比较常用的有使用 SVM (Support Vector Machine) 的 Zinnia( http://zinnia.so ...

  5. windows脚本编制引擎_手把手教你写脚本引擎(一)

    手把手教你写脚本引擎(一)--挑选语言的特性 陈梓瀚 华南理工大学软件本科05级 脚本引擎的作用在于增强程序的可配置性.从游戏到管理系统都需要脚本,甚至连工业级产品的Office.3DS Max以及A ...

  6. 参考文献起止页码怎么写_毕业论文文献综述不会写?快来看看这篇文章(附含通用模板)...

    文献综述是对所研究主题的现状进行客观的叙述和评论.寻求新的研究突破点.一个资料全面.研究深入的综述不仅可以帮助作者确立毕业论文的选题,还可以为论文的深入研究提供有力的支撑.本文分享一份"毕业 ...

  7. 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用

    简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...

  8. 如何着手写一篇医学综述?

    各位医学研究生,研0的时候是不是导师都已经把综述布置下来作为你的第一份作业呀?对于医学生们来说,不管你是本科就已经开始接触科研还是研究生开始才接触科研,反正在你开始阅读文献的时候开始一篇综述总是逃不过 ...

  9. 如何写好计算机类综述怎么查文献(信息检索与利用基础知识总结一)

    文献检索 定义:为达到某一目的,将信息源与用户需求连接起来查询,鉴别,选择并确定相关信息的过程. 意义:贯穿于整个研究过程!包括:确定研究课题.提出研究假设.做好研究设计.分析研究资料.解释研究结果. ...

最新文章

  1. 从零学web前端_从零到前端英雄(第2部分)
  2. 动态查看JVM内存的工具
  3. php中如何调用datepicker,如何使用datepicker,ajax,php,mysql在两个日期之间生成报告?...
  4. 全面了解HTTP和HTTPS(开发人员必备)
  5. GDAL/ORG之Python获取与安装
  6. Java8 默认方法
  7. tablediff同步
  8. LeetCode: Add Binary 解题报告
  9. 微信分享功能问题-描述内容换行,导致js加载失败
  10. 【转】理清基本的git(github)流程
  11. CVR预估模型-ESMM
  12. 1059 Prime Factors (25 分)质因子 易错题
  13. verilog逻辑符
  14. 机器视觉:线阵相机知识汇总
  15. 参加南京mooc活动有感
  16. linux非yum安装svn,linux安装svn(yum安装)
  17. K8S报错network is not ready: container runtime network not ready
  18. Windows装逼操作
  19. 安装算量软件哪个速度快效率高?
  20. 如何剪辑视频,视频画中画制作教程分享

热门文章

  1. 占带宽测试软件,铁通网速测试
  2. 从优酷到阿里文娱,大麦终于“转正”了?
  3. 深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。
  4. JAVA 输出 1 3 6 10 15 ....
  5. 初学oracle笔记
  6. markdown写作教程总结
  7. Matlab2019 slrt(XPC)目标机U盘启动
  8. 通过QQ邮件发送文档到kindle,kindle收不到的问题
  9. IE无法上网,360浏览器部分网站无法打开
  10. 安装pytorch3d最简单方法