Giter Site home page Giter Site logo

thisisgame / cpp-game-engine-book Goto Github PK

View Code? Open in Web Editor NEW
2.6K 34.0 320.0 532.28 MB

从零编写游戏引擎教程 Writing a game engine tutorial from scratch

Home Page: http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md

License: GNU General Public License v3.0

Batchfile 4.12% C++ 76.57% QML 19.31%
3d-engine game-development blender-python toolbag gamedev book markdown gameengine opengl freetype

cpp-game-engine-book's Introduction

项目介绍 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 章介绍不定时更新。

特性列表 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

本地搭建:https://github.com/ThisisGame/thisisgame-web-openresty

随书项目调试

  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,方便其他人查询。

团队介绍 Members

  • captainchen:作者

感谢支持 Thanks

项目使用CLion IDE,使用PVS-Studio作为代码扫描分析工具,感谢其提供的开源许可。

PVS-Studio JetBrains

cpp-game-engine-book's People

Contributors

996666925 avatar cp790621656 avatar thisisgame avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cpp-game-engine-book's Issues

error gitbook server

error: error while generating page "23. classic_lighting/23.9 multi_light.md":

Template render error: (F:\cpp-game-engine-book\pages\23. classic_lighting\23.9 multi_light.md) [Line 237, Column 47]
unexpected token: }}
image

21.2和21.3中的多线程渲染是伪多线程?

(同事的业余repo很有启发,从km过来的hhh。关于多线程渲染感觉有点问题)

看了代码,感觉目前方案只能支持双线程,即1 producer + 1 consumer,无法支持任意多线程,即 1 producer + N consumer。主要原因是producer在主线程中顺序地分发任务,consumer在子线程中顺序地处理任务,不会存在前一个任务没处理完,后一个任务开始处理的情况,因此本质上还是通过阻塞执行不同任务。

例如下面的获取 handler代码,如果有N consumer的话,需要考虑consumer A还没MapVAO()consumer B就开始GetVAO()

RTTR (rttr::policy::ctor::as_raw_ptr) have a problem

我运行9.1节的测试程序时,vs2022出现报错main.obj : error LNK2001: 无法解析的外部符号 "public: static struct rttr::detail::as_raw_pointer const rttr::policy::ctor::as_raw_ptr" (?as_raw_ptr@ctor@policy@rttr@@2Uas_raw_pointer@detail@3@B),

例子的三角形demo编译报错

F:\makegameengineatnight-main\samples\draw_polygon\draw_quad\untitled\main.cpp(138): error C2065: 'trans': undeclared identifier

例子的三角形demo编译报错 但 trans有定义。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.