代码编织梦想


今天无意之间搜到了一个游戏引擎开发的开源电子书 《游戏引擎 浅入浅出》
在这里插入图片描述

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经验,对引擎某些点感兴趣即可。

每一章节介绍的知识点,都是供入门了解,并没有深挖。

简单、容易上手、短期目标、不枯燥,是这本书的追求的,太复杂的很容易中途放弃,我花了很多时间在这个上。

  1. IDE选择了CLion,开箱即用跨平台。
  2. 每一小节开头就贴上了这一节项目地址,找到后把文件夹拖到CLion里面立即可以调试。
  3. 文章中的代码片段,开头就是这个代码所在文件以及行数。
  4. 一些名词,能和其他名词关联的我都会尽量关联。例如Shader的编译与Link,我用C语言的编译来对比。OpenGL的CS模型,我用网络消息来对比。
  5. 对于需要用到其他软件的,例如Blender建模、FMOD、WWise音频制作,我都录制了视频在B站,并贴在文章里。这应该是首次在引擎书里教你如何建模、音频编辑。其他的有Substance、Toolbag插件开发,Renderdoc GPU分析工具都有简单介绍。
  6. 渲染的模型动画用美女、帅哥、色彩丰富的物体,更有成就感。
  7. 有了一定功能后,就会基于现有功能开发一个小游戏,阶段性成就才能长时间坚持。

不过在简单的同时,很多基础知识没有介绍到,C++、Python、Lua、js、多线程、文件读取,这些书中就不再提了。

只要不放弃,一章一章看下去,一定能做出自己的游戏引擎。

学习方式推荐

本以实战为主,大部分章节都有CLion实例项目,项目路径在章节开头或结尾给出。

个人推荐的学习方式如下:

  1. CLion打开项目,编译运行,看看效果。
  2. 过一遍代码,断点调试一下。
  3. 看一遍章节内容。
  4. 再过一遍代码。

资源下载

本书Markdown以及章节配套项目托管在Github上,读书过程中有疑问、发现错误都可以提Issues。

Github:https://github.com/ThisisGame/cpp-game-engine-book

特性列表 Feature

写这本书的目的是普及游戏引擎基础知识,面向的读者有一定的Unity经验,对引擎某些点感兴趣即可。

每一章节介绍的知识点,都是供入门了解,并没有深挖。

简单、容易上手、短期目标、不枯燥,是这本书的追求的,太复杂的很容易中途放弃,我花了很多时间在这个上。

容易上手

  • 每一篇都从入门角度编写,一些名词,能和其他名词关联的我都会尽量关联。
    例如Shader的编译与Link,我用C语言的编译来对比。

    C语言Shader
    目标硬件CPUGPU
    编译流程创建项目创建GPU程序
    创建编写多个C代码文件创建编写Shader(顶点Shader和片段Shader)
    把C代码发给编译器把Shader代码发送到编译器
    编译C代码编译Shader代码
    添加到链接列表添加到链接列表
    链接链接
  • 每一小节开头就贴上了这一节项目地址,把文件夹拖到CLion里面立即可以调试。

在这里插入图片描述

  • 代码片段开头标注这个代码所在文件以及行数。
    在这里插入图片描述

内容全面

从最简单的三角形绘制,到骨骼动画渲染、灯光阴影、多线程、物理、寻路AI、音频解析都会进行介绍。

|[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZhLOT6g-1669205451393)(imgs/opengl_draw_polygon/draw_triangle/draw_triangle.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JImTHRhl-1669205451394)(imgs/texture_make_beautiful/draw_cube_texture/draw_cube_urban.gif)] |  [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TynK4ZJJ-1669205451394)(imgs/ieg_open_source/draw_blender_mesh.jpg)]
|在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

引擎生态

这应该是首次在引擎书里教如何建模、音频编辑。

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

本地阅读,按照下面步骤:

  1. 安装GitBook

  2. 克隆项目:git clone https://github.com/ThisisGame/cpp-game-engine-book.git

  3. 双击gitbook_serve.bat启动本地GitBook服务器,成功后,打开浏览器访问http://localhost:4000,即可阅读。

随书项目调试

  1. 安装CLion。
  2. 在每小节开头找到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,方便其他人查询。

游戏编程之路-阿哲-爱代码爱编程

此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战 自我,超越自我,这样才能攀登到游戏技术的最高峰            ——阿哲VS自己    自序  这篇文章我写了大约4个月,前后修改很多次,做为吉大的学生,毕业前给学弟,学妹, 留下的最后一个文章,也是我去年在《如果学好编程》中承诺过的。29887743 这个是我建 立的

引擎入门 | unity ui简介–第1部分(9)_unity游戏开发的博客-爱代码爱编程

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 21.增加设置按钮 22.添加场景构建 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长,分为十篇,本篇为第九篇。 21.增加设置按钮 还有几件事要做,首先,添加设置按钮。 你也许能自己自己实现这个,所以你只需要得到开始按钮的大小和位置。其

unity vr 开发教程: oculus 一体机开发 (一) 环境配置(基于 oculus integration v46)_yy-nb的博客-爱代码爱编程

文章目录 📕教程说明📕安装 Unity 时需要添加的模块📕设置 Unity 的 Build Settings📕导入 Oculus Integration📕设置 Project Settings⭐通用设置⭐Render

steam项目推进(二)—— 在项目中使用fairygui_某羊的博客-爱代码爱编程

一、遇到的问题 昨天把代码大致清理了一遍之后,发现代码中存在很大的一个问题是数据和表现耦合在一起了,如下: using UnityEngine; using UnityEngine.UI; public enum Ca

unity视差贴图多实现对比和改进_瘦瘦的小北的博客-爱代码爱编程

视差贴图多种实现方式对比和改进 视差贴图视差映射陡峭视差映射视差遮蔽映射迭代视差映射-kerry 视差贴图 参考 与法线贴图相同,可以模拟出物体得深度感,同时它得改进是能够随着视角得偏移显示不同得深度

ios适配unity-2019_一品大帅的博客-爱代码爱编程

iOS适配Unity-2019 背景 由于2019起,Unity的Xcode工程,更改了项目结构。 Unity 2018的结构: 可以看Targets只有一个Unity-iPhone,Unity-iPhone直接

unity3d占用内存太大怎么解决呢? -下_小小姑娘很大的博客-爱代码爱编程

什么时候才是UnusedAssets?看一个例子: Object obj = Resources.Load("MyPrefab"); GameObject instance = Instantiate(obj) as GameObject; ......... Destroy(instance); 创建随后销毁了一个Prefab实例,这时候 MyPrefa

unity动态创建avatar骨骼映射_nbin_newby的博客-爱代码爱编程

目录 前言1 了解Avatar骨骼映射2 动态创建Avatar骨骼映射2.1 寻找相关APIAvatarBuilder.BuildHumanAvatarDeclarationParametersReturnsDesc

unity recttransform 组件_unityrecttransform-爱代码爱编程

文章目录 1.RectTransform 介绍2.Anchor 锚点3.Pivot 轴心点4.RectTransform API 属性4.1 anchorMax、anchorMin —— 锚点矩形4.2 off