用vulkan写个引擎 (一)综述
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写个引擎 (一)综述相关推荐
- 用vulkan写个引擎 (二)vk组件
这篇文章开始展开介绍工程的组织方式和组件模块.首先从vulkan组件开始.大部分文章都是把官网例子重复一遍,或是罗列接口说明,根本不足以用在生产环境. 注意,文章主要表述组件的功能和要点,和它们之间的 ...
- 用vulkan写个引擎 (三)ui组件
ui组件也许是最令人着迷的部分.这部分最复杂的要数文字排版系统,比较重要的部分分别是属性集部件,信号槽部件,布局系统.相对复杂的部分是图片顶点数据拼装,和系统事件处理. 仓库:https://bitb ...
- 用vulkan写个引擎 (四)PBR着色器
PBR全称(Physicallly-Based Rendering),基于物理的渲染.本文将提供一份GLSL实用型着色器.对于理论部分网络上已经有太多文章了. 仓库:https://bitbucket ...
- 一个简单有效的手写识别引擎
实现一个手写识别引擎有多复杂困难?那就要看你使用什么算法啦. 在开源库中比较常用的有使用 SVM (Support Vector Machine) 的 Zinnia( http://zinnia.so ...
- windows脚本编制引擎_手把手教你写脚本引擎(一)
手把手教你写脚本引擎(一)--挑选语言的特性 陈梓瀚 华南理工大学软件本科05级 脚本引擎的作用在于增强程序的可配置性.从游戏到管理系统都需要脚本,甚至连工业级产品的Office.3DS Max以及A ...
- 参考文献起止页码怎么写_毕业论文文献综述不会写?快来看看这篇文章(附含通用模板)...
文献综述是对所研究主题的现状进行客观的叙述和评论.寻求新的研究突破点.一个资料全面.研究深入的综述不仅可以帮助作者确立毕业论文的选题,还可以为论文的深入研究提供有力的支撑.本文分享一份"毕业 ...
- 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用
简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...
- 如何着手写一篇医学综述?
各位医学研究生,研0的时候是不是导师都已经把综述布置下来作为你的第一份作业呀?对于医学生们来说,不管你是本科就已经开始接触科研还是研究生开始才接触科研,反正在你开始阅读文献的时候开始一篇综述总是逃不过 ...
- 如何写好计算机类综述怎么查文献(信息检索与利用基础知识总结一)
文献检索 定义:为达到某一目的,将信息源与用户需求连接起来查询,鉴别,选择并确定相关信息的过程. 意义:贯穿于整个研究过程!包括:确定研究课题.提出研究假设.做好研究设计.分析研究资料.解释研究结果. ...
最新文章
- 从零学web前端_从零到前端英雄(第2部分)
- 动态查看JVM内存的工具
- php中如何调用datepicker,如何使用datepicker,ajax,php,mysql在两个日期之间生成报告?...
- 全面了解HTTP和HTTPS(开发人员必备)
- GDAL/ORG之Python获取与安装
- Java8 默认方法
- tablediff同步
- LeetCode: Add Binary 解题报告
- 微信分享功能问题-描述内容换行,导致js加载失败
- 【转】理清基本的git(github)流程
- CVR预估模型-ESMM
- 1059 Prime Factors (25 分)质因子 易错题
- verilog逻辑符
- 机器视觉:线阵相机知识汇总
- 参加南京mooc活动有感
- linux非yum安装svn,linux安装svn(yum安装)
- K8S报错network is not ready: container runtime network not ready
- Windows装逼操作
- 安装算量软件哪个速度快效率高?
- 如何剪辑视频,视频画中画制作教程分享