Resources¶
Useful articles/resources we found useful during the development of Isetta
Getting Started¶
A special thanks to one of our readers, Dylan, for sending us this article!
3D Math¶
- Game Engine Architecture 2nd edition - Chapter 4: 3D Math for Games
- Essential Mathematics for Games & Interactive Applications by James Van Verth & Lars Bishop
- Geometric Tools for Computer Graphics by Philip Schneider & David Eberly
AI¶
The only "artificial intelligence" that we cover with our engine is the A* algorithm, which you can find in our Week 11 blog. However, modern AI programming is an completely different challenge! Luckily, one of our readers, Emilia, found a collection of AI programming articles and tools that might serve as a good start to anyone interested!
Builds¶
Cache¶
- Gallery of Processor Cache Effects
- Scott Meyers - CPU Caches and Why You care
- Latency Numbers Every Programmer Should Know
Collision Detection¶
-
General Introduction
-
Coarse Phase (Broad Phase)
-
Fine Phase & Others
- Gamasutra - Simple Intersection Tests for Games
- Correct Box Sphere Intersection
- StackExchange - Simple 3D OBB-Collision
- Separating Axis Theorem for OBB
- Randy Gual - Deriving OBB to OBB Intersection
- Capsule-Capsule Collision in Games
- gamedev.net - Capsule-Box Intersection
- Distance between 3D Lines & Segments
-
Raycasting
-
GJK
Config File (Engine Config)¶
- Create A Simple Configuration Parser
- Implementing a CVAR System
- C++11/14 How to parse a simple config file
- A Small Class to Read INI File
- CryEngine
- Lumberyard
- Unreal
Data-Oriented vs Object-Oriented¶
- Entity Component Systems & Data Oriented Design (Aras Pranckevicius)
- CppCon 2014: Mike Acton "Data-Oriented Design and C++"
- CppCon 2015: Vittorio Romeo “Implementation of a component-based entity system in modern C++”
- Dice Introduction to Data-Oriented Design
- Stingray's Practical Examples in Data Oriented Design
- Data-Oriented Demo: SOA, composition Jonathan Blow
Data Structures¶
- Ring Buffers
- Everything about unordered_map
- unordered_map cppreference
- Data Structures in Games
- Game Engine Architecture 2nd edition - Chapter 5.3: Containers
- Why inheritance is viewed poorly
DLL¶
- Windows Walkthrough: Creating and Using a Dynamic Link Library
- Inline Functions with dllimport/dllexport
- Multiple Classes in DLL File
- How to export a DLL from Visual Studio 2017 C++ Project
ECS¶
Engine Loop¶
Filesystem¶
- Windows with C++ - The Evolution of Threads and IO in Windows
- StackOverflow
- Microsoft Docs
- Multithreading Performance
- Understanding Async IO Operations
Graphics¶
- Horde3D
- OpenGL
- LearnOpenGL
- OpenGL Error Codes
GUI¶
- Retained Mode Versus Immediate Mode
- Dear ImGui
- ImGui in 3D
- IMGUI for GameDev tools
- Why Qt and not IMGUI
Memory¶
-
Introduction
- Game Engine Architecture 2nd edition - Chapter 3.2.5.1: Alignment and Packing
- Game Engine Architecture 2nd edition - Chapter 5.2: Memory Management
- Gamesutra - Writing a Game Engine from Scratch Part2: Memory: Also covers modern CPU memory access patterns.
- Are we out of memory?
-
Implementation
- Randy Gaul's Game Programming Blog - Memory Management: "Anything that has a very clear and non-variable lifespan should be able to be allocated on a stack."
- IBM - Building your own memory manager for C/C++ projects: A step by step guide on implementing some allocators.
- ISO C++ FAQ: Is there a way to force new to allocate memory from a specific memory area?: Some discussion on placement
new
,new
, anddelete
, and what you should know if you are going to manage object's lifetime on your own. - GitHub - Memory Allocators Example
- Use the Memory Windows in the Visual Studio Debugger: The memory windows is very important when debugging memory allocators. You can see the memory layout byte by byte.
- Memory Patterns in Visual Studio: Another utility for debugging memory allocator. Visual Studio uses certain patterns to mark the state of memory chunks.
- C++ Casting, or: "Oh No, They Broke Malloc!": On different types of casts (
static_cast
,reinterpret_cast
,const_cast
,dynamic_cast
, C-style casts) in C++ and when you should use them.reinterpret_cast
is especially important as we will need to castuintptr_t
to actual pointers a lot. - When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
- ISO C++ FAQ on Memory Management
- How does delete[] “know” the size of the operand array?
Networking¶
- Gaffer On Games - Game Networking
- The TRIBES Engine Networking Model or How to Make the Internet Rock for Multiplayer Games
- The DOOM III Network Architecture
- Multiplayer Game Programming
- Ch. 6, Network Topologies and Sample Games covers how to build out an application layer for your game networking
- UDP Sockets
Serialization / Reflection¶
- A C++ 11 Reflection and Serialization library on Github
- A practical guide to C++ Serialization (use Boost)
- Serialization and Unserialization (ISO C++)
- Boost Serialization (Requirements and Other Solutions)
- C++ Meta-Serialization
- s11n - Serialization Library
- Eternity - Serialization Library
- Cereal - Serialization Library
Sound¶
- Unreal Audio System Overview
- Demystifying Audio Middleware
- FMOD API Overview
- Game Engine Architecture 2nd edition - Chapter 13: Audio
String Hashing¶
- A StringID Library on Github
- Practical Hash IDs
- Minial perfect hashing for game assets
- Preprocessed strings for asset ids
- Hash Tables - Introduction
Scene Graph¶
- Transform:
- Game Engine Architecture 2nd edition - Chapter 4: 3D Math for Games
- Mathematics for 3D Game Programming and Computer Graphics 3rd edition - Chapter 2-4
- Godot Engine - Using transforms
- Unity API - transform
- Unreal’s FTransform class
- YouTube - Gimbal Lock Explained
Visual Studio¶
Misc.¶
- In-house Engine Development: Process Tips
- String Interning - Useful Properties & Github Repo
- Fast C++ Logging Library
- Stanford CS101 - Bits and Bytes
- Microsoft Docs - Walkthrough: Create and use your own Dynamic Link Library (C++)
Misc. C++¶
- LearnC++ — Overloading the comparison operators
- Cppreference - Array Initialization
- Cppreference - Priority Queue
- Cppreference - Parameter pack
- Cppreference - Constraints and concepts
- StackOverflow - Why is
inline
required on static inline variables? - StackOverflow - How are C++11 lambdas represented and passed?
- Variadic Templates
- Eli Bendersky's Blog - Variadic templates in C++
- Bartek's coding blog - Factory With Self-Registering Types: We referenced this article we designing our level auto registration system.