关键词:
文章目录
今天无意之间搜到了一个游戏引擎开发的开源电子书 《游戏引擎 浅入浅出》
PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book
项目介绍 README
本书以实际项目开发Timeline,完整介绍一个游戏引擎的所有模块,从最基础的OpenGL环境搭建,到骨骼动画、多线程渲染、阴影实现等等,最后实现一个完整的游戏引擎。
章节内容 Chapter
-
第 1 章介绍游戏引擎框架,以Unity为例,介绍游戏引擎组成。
-
第 2 章介绍OpenGL开发环境搭建,创建一个OpenGL空窗口来入坑。
-
第 3 章介绍使用OpenGL绘制三角形、正方形、立方体,来熟悉游戏渲染的最基础元素。
-
第 4 章介绍Shader的概念,编译链接,以及Shader格式、关键字。
-
第 5 章介绍贴图格式,从直接读取PNG、JPG渲染,然后介绍GPU所使用的的压缩纹理。
-
第 6 章介绍索引与缓冲区对象,索引就是多个顶点的下标,使用索引可以复用顶点渲染。而缓冲区则是将顶点数据存储于显存中,不用再每一帧都从内存上传到GPU。
-
第 7 章介绍引擎自定义的Mesh文件格式以及材质的组成。将原来写死在代码中的顶点数据存储到Mesh文件中,将原来写死在代码中的Shader参数存储到材质中。
-
第 8 章介绍使用Blender制作模型并编写Python代码导出为Mesh文件。
-
第 9 章介绍如何实现GameObject-Component模式。
-
第 10 章介绍什么是相机,以及多相机渲染排序。
-
第 11 章介绍获取鼠标、键盘输入。
-
第 12 章介绍如何将Demo代码,拆分为引擎源码与项目源码。
-
第 13 章介绍使用FreeType对指定字符生成单Alpha通道的纹理并渲染,以及使用顶点色实现彩色文字。
-
第 14 章介绍基础GUI控件的实现,包括UIImage、UIMask、UIText、UIButton。有了这几个基础,可以实现其他复杂的控件。
-
第 15 章介绍使用FMOD播放MP3、Wav音乐,以及使用FMOD专业音频编辑器制作音效与解析播放。
-
第 16 章介绍easy_profiler这个C++性能分析库。
-
第 17 章介绍使用Sol2这个开源库,将Lua集成到引擎,后续使用C++开发引擎,使用Lua编写测试代码。
-
第 18 章介绍骨骼动画原理,并介绍使用Blender制作骨骼动画、导出到skeleton_anim文件,在引擎解析。
-
第 19 章介绍骨骼蒙皮动画,在Blender刷权重,导出到weight文件,在引擎解析,渲染。
-
第 20 章介绍如何从FBX文件导出Mesh、骨骼动画、权重,实例导出古风少女并渲染。
-
第 21 章介绍多线程渲染,将OpenGL API放到单独的渲染线程,从主线程发命令到渲染线程,将DrawCall的影响分出去,减轻主线程负担。
-
第 22 章介绍不定时更新。
适用读者
写这本书的目的是普及游戏引擎基础知识,面向的读者有一定的Unity经验,对引擎某些点感兴趣即可。
每一章节介绍的知识点,都是供入门了解,并没有深挖。
简单、容易上手、短期目标、不枯燥,是这本书的追求的,太复杂的很容易中途放弃,我花了很多时间在这个上。
- IDE选择了CLion,开箱即用跨平台。
- 每一小节开头就贴上了这一节项目地址,找到后把文件夹拖到CLion里面立即可以调试。
- 文章中的代码片段,开头就是这个代码所在文件以及行数。
- 一些名词,能和其他名词关联的我都会尽量关联。例如Shader的编译与Link,我用C语言的编译来对比。OpenGL的CS模型,我用网络消息来对比。
- 对于需要用到其他软件的,例如Blender建模、FMOD、WWise音频制作,我都录制了视频在B站,并贴在文章里。这应该是首次在引擎书里教你如何建模、音频编辑。其他的有Substance、Toolbag插件开发,Renderdoc GPU分析工具都有简单介绍。
- 渲染的模型动画用美女、帅哥、色彩丰富的物体,更有成就感。
- 有了一定功能后,就会基于现有功能开发一个小游戏,阶段性成就才能长时间坚持。
不过在简单的同时,很多基础知识没有介绍到,C++、Python、Lua、js、多线程、文件读取,这些书中就不再提了。
只要不放弃,一章一章看下去,一定能做出自己的游戏引擎。
学习方式推荐
本以实战为主,大部分章节都有CLion实例项目,项目路径在章节开头或结尾给出。
个人推荐的学习方式如下:
- CLion打开项目,编译运行,看看效果。
- 过一遍代码,断点调试一下。
- 看一遍章节内容。
- 再过一遍代码。
资源下载
本书Markdown以及章节配套项目托管在Github上,读书过程中有疑问、发现错误都可以提Issues。
特性列表 Feature
写这本书的目的是普及游戏引擎基础知识,面向的读者有一定的Unity经验,对引擎某些点感兴趣即可。
每一章节介绍的知识点,都是供入门了解,并没有深挖。
简单、容易上手、短期目标、不枯燥,是这本书的追求的,太复杂的很容易中途放弃,我花了很多时间在这个上。
容易上手
-
每一篇都从入门角度编写,一些名词,能和其他名词关联的我都会尽量关联。
例如Shader的编译与Link,我用C语言的编译来对比。C语言 Shader 目标硬件 CPU GPU 编译流程 创建项目 创建GPU程序 创建编写多个C代码文件 创建编写Shader(顶点Shader和片段Shader) 把C代码发给编译器 把Shader代码发送到编译器 编译C代码 编译Shader代码 添加到链接列表 添加到链接列表 链接 链接 -
每一小节开头就贴上了这一节项目地址,把文件夹拖到CLion里面立即可以调试。
- 代码片段开头标注这个代码所在文件以及行数。
内容全面
从最简单的三角形绘制,到骨骼动画渲染、灯光阴影、多线程、物理、寻路AI、音频解析都会进行介绍。
|
|
引擎生态
这应该是首次在引擎书里教如何建模、音频编辑。
Blender建模、FMOD、WWise音频制作,我都录制了视频。
其他的Substance、Toolbag插件开发,Renderdoc DrawCall分析都有简单介绍。
短期目标
渲染的模型动画用美女、帅哥、色彩丰富的物体,更有成就感。
有了一定功能后,就会基于现有功能开发一个小游戏,阶段性成就才能长时间坚持。
快速上手 Getting Start
阅读图书
在线阅读:http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md
本地阅读,按照下面步骤:
-
安装
GitBook
-
克隆项目:
git clone https://github.com/ThisisGame/cpp-game-engine-book.git
-
双击
gitbook_serve.bat
启动本地GitBook服务器,成功后,打开浏览器访问http://localhost:4000
,即可阅读。
随书项目调试
- 安装CLion。
- 在每小节开头找到CLion项目目录,用CLion打开。
常见问题 FAQ
书中讲述的引擎技术适用哪些系统平台?
目前适配Windows与MacOS。
- 由于Arm版Mac只支持OpenGL Core,所以《6.3 OpenGL Core Profile》之前的章节实例无法在Arm版Mac运行。
如何使用VisualStudio开发?
随书实例使用CLion开发,CLion支持Windows与Mac,跨平台不需要额外学习成本。
VisualStudio从2019开始支持CMake项目,所以在Windows上也可以使用VisualStudio2019及以上版本打开随书实例CLion项目。
具体请参考 2.3 使用VisualStudio开发
行为准则 Code Of Conduct
-
引擎使用C++开发,遵从Google C++规范,贡献代码时,需要先熟悉代码风格。
-
贡献代码时,请先fork本项目到你的名下,然后修改代码,通过合并请求来提交。
-
目前适配Windows和Mac,同样,你可以在这两个系统上开发。代码提交前,请确保功能在这两个系统上都是正常且一致的。
如何加入 How To Join
- 你可以直接打开在线阅读:
http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md
- 本书是开源的,你可以fork本项目,然后修改代码,然后提交合并请求。
- 欢迎大家提Issue,反馈遇到的问题。内网可以直接联系我。也可以加入q群(879187705)讨论,得到答案后,更新issue,方便其他人查询。
我的渲染技术进阶之旅基于filament渲染引擎绘制一个不停旋转的彩色矩形
一、绘制三角形回顾在上一篇博客【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:Android版本的Filament第一个示例:sample-hello-triangle中,我们分析了如何使用Filament来绘制一个三角形,效果如下所... 查看详情
我的渲染技术进阶之旅games104游戏引擎思维导图2.0上线!
这份思维导图凝结了1500+个知识点成为了许多同学成长路上的“导览”经过了一个月的重新打磨我们的思维导图2.0正式上线登录GAMES104官网即可获取【思维导图2.0】GAMES104官网https://games104.boomingtech.com/或点击[原文]即可下载你可... 查看详情
我的渲染技术进阶之旅games104游戏引擎思维导图2.0上线!
这份思维导图凝结了1500+个知识点成为了许多同学成长路上的“导览”经过了一个月的重新打磨我们的思维导图2.0正式上线登录GAMES104官网即可获取【思维导图2.0】GAMES104官网https://games104.boomingtech.com/或点击[原文]即可下载你可... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:android版本的filament第一个示例:sample-hello-triangle
文章目录一、效果展示二、之前的博客三、示例工程sample-hello-triangle源码分析3.1项目源码路径3.2分析源码3.2.1分析AndroidManifest.xml3.2.2分析`build.gradle`文件3.2.2.1使用插件`filament-tools-plugin`转换`.mat`文件为`.filamat`文件3.2.2.2配置aaptOptio... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用matc命令自动将.mat文件转换为.filament文件?(代码片段)
...Linux、macOS和WebGL2在我前两篇博客介绍了如何编译Filament【我的渲染技术进阶之旅】如何在Windows系统编译Filament的android版本程序?【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?今天在看Filament的示例工程的时候,发... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:android版本的filament第一个示例:sample-hello-triangle
文章目录一、效果展示二、之前的博客三、示例工程sample-hello-triangle源码分析3.1项目源码路径3.2分析源码3.2.1分析AndroidManifest.xml3.2.2分析`build.gradle`文件3.2.2.1使用插件`filament-tools-plugin`转换`.mat`文件为`.filamat`文件3.2.2.2配置aaptOptio... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用filament命令将.obj或者.fbx文件转换为.filamesh文件?
文章目录一、需求描述1.1为啥要学习`filamesh`命令1.2从android项目的build.gradle看起1.3查看FilamentToolsPlugin插件源代码1.3.1FilamentToolsPlugin插件注册task1.3.2查看filamentCompileMesh这个task的源代码二、关于filamesh命令2.1filamesh工具在哪里?2.2fil... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用filamesh命令将.obj或者.fbx文件转换为.filamesh文件?
文章目录一、需求描述1.1为啥要学习`filamesh`命令1.2从android项目的build.gradle看起1.3查看FilamentToolsPlugin插件源代码1.3.1FilamentToolsPlugin插件注册task1.3.2查看filamentCompileMesh这个task的源代码二、关于filamesh命令2.1filamesh工具在哪里?2.2fil... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用cmgen命令自动将.hdr文件转换为.ktx文件或者.rgb32文件等?
文章目录一、需求描述1.1为啥要学习cmgen命令1.1bug描述1.1.1运行错误描述:java.io.FileNotFoundException:envs/flower_road_no_sun_2k/m0_nx.rgb32f1.1.2编译之前:1.1.3编译之后二、了解cmgen工具2.1从android项目的build.gradle看起2.2查看FilamentToolsPlugin插件... 查看详情
我的渲染技术进阶之旅收集到的关于基于图像光照(imagebasedlighting)ibl的一些资料(代码片段)
一、需求描述在我的博客【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用cmgen命令自动将.hdr文件转换为.ktx文件或者.rgb32文件等?中有简单的提了一下ibl并成功的利用cmgen命令行... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用cmgen命令自动将.hdr文件转换为.ktx文件或者.rgb32文件等?
文章目录一、需求描述1.1为啥要学习cmgen命令1.1bug描述1.1.1运行错误描述:java.io.FileNotFoundException:envs/flower_road_no_sun_2k/m0_nx.rgb32f1.1.2编译之前:1.1.3编译之后二、了解cmgen工具2.1从android项目的build.gradle看起2.2查看FilamentToolsPlugin插件... 查看详情
我的渲染技术进阶之旅如何编译filament的windows版本程序?(代码片段)
一、Filament简介Filament是一个基于物理的实时渲染引擎,适用于Android、iOS、Windows、Linux、macOS和WebGL2。它被设计为在Android上尽可能小且尽可能高效。github地址:https://github.com/google/filament渲染案例:APIsNativeC++APIforAndroid,iOS,Linux,macOS... 查看详情
我的渲染技术进阶之旅如何编译filament的windows版本程序?(代码片段)
一、Filament简介Filament是一个基于物理的实时渲染引擎,适用于Android、iOS、Windows、Linux、macOS和WebGL2。它被设计为在Android上尽可能小且尽可能高效。github地址:https://github.com/google/filament渲染案例:APIsNativeC++APIforAndroid,iOS,Linux,macOS... 查看详情
我的渲染技术进阶之旅如何编译filament的windows版本程序?(代码片段)
一、Filament简介Filament是一个基于物理的实时渲染引擎,适用于Android、iOS、Windows、Linux、macOS和WebGL2。它被设计为在Android上尽可能小且尽可能高效。github地址:https://github.com/google/filament渲染案例:APIsNativeC++APIforAndroid,iOS,Linux,macOS... 查看详情
我的渲染技术进阶之旅google开源的基于物理的实时渲染引擎filament源码分析:在android中如何使用matc命令自动将输入材质定义.mat文件转换为输出材质包.filamat文件?(代码片
文章目录一、需求描述二、先打开.mat文件查看一下三、matc工具3.1什么是matc工具呢?3.2matc工具在哪里?3.3matc的底层实现源代码3.4命令行使用matc3.4.1执行matc.exe--help命令查看matc命令的用法3.4.2执行matc命令将.mat文件转换为.filamat文... 查看详情
我的渲染技术进阶之旅收集到的关于基于图像光照(imagebasedlighting)ibl的一些资料(代码片段)
一、需求描述在我的博客【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用cmgen命令自动将.hdr文件转换为.ktx文件或者.rgb32文件等?中有简单的提了一下ibl并成功的利用cmgen命令行... 查看详情
我的渲染技术进阶之旅glfw库简单介绍(代码片段)
文章目录一、为啥去了解glfw?二、glfw相关资料三、glfw简单示例1.引入GLFW头文件2.初始化和终止GLFW3.设置错误回调4.创建窗口和上下文5.使OpenGL上下文成为当前上下文6.检查窗口关闭标志7.接收输入事件8.使用OpenGL渲染9.读取定时器10.... 查看详情
我的渲染技术进阶之旅关于c++轻量级界面开发框架dearimgui介绍(代码片段)
文章目录一、怎么知道ImGui的1.1Filament中有使用ImGui1.2其他很多渲染框架都有使用ImGui二、ImGui介绍2.1ImGui风格2.2Imgui介绍2.2.1Imgui简介2.2.2Imgui用法2.2.3Demo示例2.2.4集成2.2.5更多案例2.3查看Imgui实例源代码2.3.1运行demo2.3.2项目结构分析2.3... 查看详情