If you want to run this program,
run git clone https://github.com/microsoft/vcpkg.git
to install vcpkg,
then install spdlog, glfw, yaml-cpp and eigen3 through vcpkg, and
change VCPKG_ROOT in CMakeLists.txt.
Every thing should be fine.
macos
cmake -DCMAKE_TOOLCHAIN_FILE=/Users/developer/Program/vcpkg/scripts/buildsystems/vcpkg.cmake ..
Mainly Following Hazel Video Series
从零开始手敲次世代游戏引擎
1。输入管理模块,用来获取用户输入
2。策略模块,用来执行策略
3。场景管理模块,用来管理场景和更新场景
4。渲染模块,用来执行渲染和画面输出
5。音频音效模块,用来管理声音,混音和播放
6。网络通信模块,用来管理网络通信
7。文件I/O模块,用来管理资源的加载和参数的保存回复
8。内存管理模块,用来调度管理内存上的资源
9。驱动模块,用来根据时间,事件等驱动其它模块
10。辅助模块,用来执行调试,log输出等辅助功能
11。应用程序模块,用来抽象处理配置文件,特定平台的通知,创建窗口等需要与特定平台对接的部分
Game Engine Work flow
1.我们首先需要一个建立一个跨平台的模块,它能够在不同的操作系统+图形API环境当中,为我们创建这个基本的上下文。(可能是窗口,可能是全屏FrameBuffer,也可能是Off Screen Buffer)
2.然后,我们需要对平台的硬件能力进行查询和遍历,找到平台硬件(这里特指GPU)所能够支持的画布格式,并且将1所创建的上下文的FrameBuffer格式指定为这个格式,GPU才能够在上面作画。
3.CPU使用平台所支持的图形API创建绘图所需要的各种Heap/Buffer/View,生成资源描述子(RootSignature或者Descriptor),将各种资源的元数据(Meta Data)填入描述子,并传递给GPU
4.CPU根据场景描述信息进行顶点数据/索引/贴图/Shader等的加载,并将其展开在GPU所能看到的(也就是在描述子里面登记过的)Buffer当中
帧循环开始
5.CPU读取用户输入(在之前的文章当中还未涉及),并更新用户可操作场景物体的位置和状态
6.CPU执行游戏逻辑(包括动画、AI),并更新对应物体的位置和状态
7.CPU进行物体的裁剪,找出需要绘制的物体(可见的物体)
8.CPU将可见物体的位置和状态翻译成为常量,并把常量上传到GPU可见的常量缓冲区
9.CPU生成记录GPU绘图指令的Buffer (CommandList),并记录绘图指令
10.CPU创建Fence,以及相关的Event,进行CPU和GPU之间的同步
11.CPU提交记录了绘图指令的Buffer(CommandList),然后等待GPU完成绘制(通过观察Fence)
12.CPU提交绘制结果,要求显示(Flip或者Present)
13.帧循环结束
Entity-Component-System
一个实体只包含了一个ID值和一个组件集合。实体并不包含任何可执行的代码。组件集合也不必和实体ID值存储在一起。但应该设计使组件集合的访问效率尽可能高。虽然,每个实体使用不同的ID值不是必须的,但这样做有下面这些优点:
1.实体可以直接使用ID值引用,避免使用指针。
2.方便进行持久化,避免读取数据时,重建指针。
3.数据可以在内存中更加自由地存放。
4.实体ID经过设计可以跨网络使用。
上面的部分优点也可以通过智能指针达到。
Resources
Online Tools
https://code2flow.com/app
C++
http://en.cppreference.com/w/
http://www.cplusplus.com/
http://www.learncpp.com/
https://isocpp.org/wiki/faq/
https://www.youtube.com/user/CppCon/featured
https://sourceforge.net/p/predef/wiki/OperatingSystems/
https://godbolt.org/
https://cppinsights.io/
http://graphics.stanford.edu/~seander/bithacks.html
https://github.com/AnthonyCalandra/modern-cpp-features
C#
https://youtu.be/FID9sDXmCoQ
Graphics Theoretics
https://paroj.github.io/gltut/index.html
Graphics Debugging
https://renderdoc.org/
https://gpuopen.com/compute-product/codexl/
https://gpuopen.com/archive/gpu-perfstudio/
OpenGL
http://docs.gl/
https://www.khronos.org/opengl/wiki/
http://www.opengl-tutorial.org/
https://learnopengl.com/
http://ogldev.atspace.co.uk/
http://nehe.gamedev.net/
https://open.gl/
DirectX
http://www.rastertek.com/
http://www.directxtutorial.com/
https://msdn.microsoft.com/en-us/library/windows/desktop/dn899121(v=vs.85).aspx
https://digitalerr0r.wordpress.com/2015/08/19/quickstart-directx-12-programming/
https://www.3dgep.com/
Vulkan
https://vulkan-tutorial.com/
https://www.khronos.org/registry/vulkan/specs/1.2/html/vkspec.html
Metal
https://www.youtube.com/watch?v=PcA-VAybgIQ&list=PLEXt1-oJUa4BVgjZt9tK2MhV_DW7PVDsg
Game Engines
https://google.github.io/filament/Filament.md.html
Math
https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab
https://www.youtube.com/playlist?list=PL7wAPgl1JVvUEb0dIygHzO4698tmcwLk9
https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm
http://www.euclideanspace.com/
https://eater.net/quaternions
https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/
E-Books
https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md
https://www.packtpub.com/packt/offers/free-learning
General
https://github.com/mr-mig/every-programmer-should-know
https://ideone.com/
https://code.sololearn.com/
Programming Patterns
https://gafferongames.com/post/fix_your_timestep/
https://dewitters.com/dewitters-gameloop/
http://gameprogrammingpatterns.com/
https://refactoring.guru/design-patterns/catalog
Game Design
https://vitalzigns.itch.io/gdd
https://www.youtube.com/user/McBacon1337
Free Assets
https://hdrihaven.com/
https://texturehaven.com/
https://3dmodelhaven.com/
https://www.wildtextures.com/
https://www.textures.com/
https://poly.google.com/
https://kenney.nl/
Rich Presences
Visual Studio (2017): https://marketplace.visualstudio.com/items?itemName=swanzana.discord-rpc-vs
Visual Studio (2019): https://marketplace.visualstudio.com/items?itemName=VisualDevelopment.drpcvs2019
Visual Studio Code: https://marketplace.visualstudio.com/items?itemName=icrawl.discord-vscode