Welcome to my journey in C/C++ game and engine development. This repository serves as a personal log of my progress, learning resources, and projects.
Hi, I'm Erkam, an aspiring game developer with a passion for C/C++ and game and engine development. I enjoy learning new technologies and sharing my progress with the community.
To document my journey in mastering C/C++ for game and engine development by building hands-on projects, exploring foundational concepts, and honing my skills in both high and low-level game development. This repository aims to serve as a transparent record of my learning process, inspire others who are on similar paths, and encourage feedback and collaboration within the developer community.
- You will see that I have put quite a lot of resources (4 at the moment) in learning resources. This is because I've started writing the basics of the game engine. Because of this, I'm constantly reading and implementing from different sources, so the order in which the resources are listed doesn't indicate the order in which they will be completed. In the future I plan to add articles or conferences that I have benefited from.
- See why I paused CS:APP
- I removed the start date attribute of Computer Systems: A Programmer's Perspective and set it to 3rd priority from learning resources, because it doesn't make sense right now to try to read this book binge studying. I need to develop projects to make what is explained in the book more meaningful for me. On the other hand, I don't want to put the book on hold, so I think I will continue little by little as I have time from other learning resources and projects I have developed.
- While studying The C Programming Language by Kernighan and Ritchie, I realized that the book is more of a documentation of C itself rather than a teaching guide for beginners. Although I learned some valuable things, I didn’t feel like my overall familiarity with C improved significantly. Additionally, I found the exercises quite challenging, especially in the last three chapters. Therefore, I’ve decided not to continue with the remaining chapters and instead start C Programming: A Modern Approach by K. N. King, as I’ve heard it's better suited for learning C in a more comprehensive and beginner-friendly manner. My goal is to complete this book to solidify my understanding of C before moving on to more advanced topics.
- I decided to read Computer Systems: A Programmer's Perspective after reading and finishing The C Programming Language, because I thought I would need a relatively good knowledge of C programming to do the exercises in it, and the authors of Computer Systems: A Programmer's Perspective also recommends The C Programming Language for learning C programming.
- Also, while I am currently working on a project called Gate Survivors, I wanted to take the time to learn only one subject in depth. The subject I decided to learn in depth for now is computer systems and low level programming. So I decided to stop reading the 3D Math Primer for Graphics and Game Development for now and continue reading it after I finished reading Computer Systems: A Programmer's Perspective.
- 3D DirectX Game
Technologies Used: C, C++
Status: Ongoing
This is a 3D game engine that I plan to implement using all the knowledge I have learned. This is the project I will do the most work on over time. This explanation will be elaborated.
Technologies Used: Unity, C#, HLSL, ECS
Status: Ongoing
This is a game built on the Unity game engine that I know, using an entity component system that I wrote myself. Thanks to this system, physics calculations, rendering and animation calculations of a very large number of entities can be done efficiently and quickly. Also, this project gives me the opportunity to showcase my skills in C# and Unity and gain experience by publishing a game and observing the post-launch process.
1. 3D Math Primer for Graphics and Game Development by Fletcher Dunn
Start Date: 2025-06-27
Status: Ongoing
Repo : This is a private repo at the moment.
- 1. Cartesian Coordinate Systems
- 2. Vectors
- 3. Multiple Coordinate Spaces
- 4. Introduction to Matrices
- 5. Matrices and Linear Transformations
- 6. More on Matrices
- 7. Polar Coordinate Systems
- 8. Rotation in Three Dimensions
- 9. Geometric Primitives
- 10. Mathematical Topics from 3D Graphics
- 11. Mechanics 1: Linear Kinematics and Calculus
- 12. Mechanics 2: Linear and Rotational Dynamics
- 13. Curves in 3D
- 14. Afterword
2. DirectX 11 Tutorials from RasterTek by RasterTek
Start Date: 2025-07-11
Status: Ongoing
Repo : This is a private repo at the moment.
- 1. Setting up DirectX 11 with Visual Studio 2022
- 2. Creating a Framework and Window
- 3. Initializing DirectX 11
- 4. Buffers, Shaders, and HLSL
- 5. Texturing
- 6. Diffuse Lighting
- 7. 3D Model Rendering
- 8. Scaling, Rotation, and Translation
- 9. Ambient Lighting
- 10. Specular Lighting
- 11. Multiple Point Lights
- 12. 2D Rendering
- 13. Sprites and Timers
- 14. Font Engine
- 15. FPS Counters
- 16. Direct Input
- 17. Multitexturing
- 18. Light Maps
- 19. Alpha Mapping
- 20. Normal Mapping
- 21. Specular Mapping
- 22. Managing Multiple Shaders
- 23. Frustum Culling
- 24. Loading Maya Models
- 25. Render to Texture
- 26. Fog
- 27. Clipping Planes
- 28. Texture Translation
- 29. Transparency
- 30. Reflection
- 31. Water
- 32. Glass and Ice
- 33. Fire
- 34. Billboarding
- 35. Depth Buffer
- 36. Blur
- 37. Screen Fades
- 38. Particle Systems
- 39. Projective Texturing
- 40. Projected Light Maps
- 41. Shadow Mapping
- 42. Multiple Light Shadow Mapping
- 43. Directional Shadow Maps
- 44. Soft Shadows
- 45. Shadow Mapping and Transparency
- 46. Glow
- 47. Picking
- 48. Instancing
- 49. Hardware Tessellation
- 50. Deferred Shading
- 51. Screen Space Ambient Occlusion
- 52. Physically Based Rendering
- 53. Heat
- 54. Parallax Scrolling
- 55. Direct Sound
- 56. 3D Sound
- 57. XAudio2
- 58. X3DAudio
- 59. Animated Particles
- 60. XInput
3. Introduction to 3D Game Programming with Direct3D 11.0 by Frank D. Luna
Start Date: 2025-07-14
Status: Ongoing
Repo : This is a private repo at the moment.
- 1. Vector Algebra
- 2. Matrix Algebra
- 3. Transformations
- 4. Direct3D Initialization
- 5. The Rendering Pipeline
- 6. Drawing in Direct3D
- 7. Lighting
- 8. Texturing
- 9. Blending
- 10. Stenciling
- 11. The Geometry Shader
- 12. The Compute Shader
- 13. The Tessellation Stages
- 14. Building a First Person Camera ,
- 15. Instancing and Frustum Culling
- 16. Picking
- 17. Cube Mapping
- 18. Normal Mapping and Displacement Mapping …..
- 19. Terrain Rendering
- 20. Particle Systems and Stream-Out
- 21. Shadow Mapping
- 22. Ambient Occlusion
- 23. Meshes
- 24. Quaternions
- 25. Character Animation
4. Game Engine Architecture by Jason Gregory
Start Date: 2025-07-14
Status: Ongoing
Repo : This is a private repo at the moment.
- 1. Introduction
- 2. Tools of the Trade
- 3. Fundamentals of Software Engineering for Games
- 4. Parallelism and Concurrent Programming
- 5. 3D Math for Games
- 6. Engine Support Systems
- 7. Resources and the File System
- 8. The Game Loop and Real-Time Simulation
- 9. Human Interface Devices (HID)
- 10. Tools for Debugging and Development
- 11. The Rendering Engine
- 12. Animation Systems
- 13. Collision and Rigid Body Dynamics
- 14. Audio
- 15. Introduction to Gameplay Systems
- 16. Runtime Gameplay Foundation Systems
- 17. You Mean There’s More?
Descending order
3. C++ Primer, 5th Edition by Stanley B. Lippman.
Start Date: 2025-04-02
End Date: 2025-06-27
Completion Time: ~160 Hours
Status: Done
Repo: My Solutions to the C++ Primer, 5th Edition
Surprisingly, this is the second book I study to learn C++. I first tried Bjarne Stroustrup's Programming: Principles and Practice Using C++ because after all he is the creator of C++. But when I started reading it, I realized that this book was not designed to teach me C++, but to teach me the basics of programming without going too deep into C++. So I put that book down and started this book, which is the other most recommended book for learning C++. I usually look at what the authors have done before I read a book, and when I saw that Stanley B. Lippmann is one of the developers of the Gamebyro Game Engine, I was even more eager to study this book.
All in all, another excellent book. With detailed explanations, exercises and a defined terms section (this is one of the parts that really helps you understand what something is in terms of definition), it covers all the basic details of C++ and the author covers everything he thinks is important.
I'm glad that I picked up this book instead of continuing with Programming: Principles and Practice Using C++. I wholeheartedly recommend this book to anyone who wants to learn the C++ programming language.
Finally, I should mention here that K. N. King's C Programming: A Modern Approach, as a textbook, teaches better than this book. However, I'm not sure how much of this is the work of the authors and how much is the difference made by the programming languages taught. I have to admit that in the end I liked C much more than C++.
2. C Programming: A Modern Approach by K. N. King.
Start Date: 2025-02-13
End Date: 2025-03-28
Completion Time: ~120 Hours
Status: Done
Repo: My Solutions to the C Programming: A Modern Approach
This is the second book I’ve read to learn C by solving problems. I first tried The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie because this book is considered the go-to for all things C. However, when I reached the middle of the book, I realized that, as someone still unfamiliar with C, I wasn't able to learn much from it.
When I started reading C Programming: A Modern Approach, I realized that The C Programming Language was not designed to teach me C. It’s simply a reference book, whereas C Programming: A Modern Approach is an excellent textbook. With its detailed explanations, exercises, programming projects, and especially the Q&A section, which offers a level of detail I haven't seen in other textbooks, it covers all the essential details of C, a language that is both simple and powerful, and addresses everything it believes to be important.
I’m glad I switched to this book instead of continuing with The C Programming Language. I highly recommend this book to anyone wanting to learn the C programming language.
Start Date: 2024-10-12
End Date: 2025-01-24
Completion Time: ~150 Hours
Status: Done
Repo: My Solutions of Introduction to Computing Systems
This book excels in showing the connection between the lowest-level hardware components and high-level programming languages, bridging the gap in a way that's both engaging and thorough. However, it’s important to note that the C and C++ lessons provided in the book are not sufficient to master these languages on their own. They serve more as a foundation for understanding how these languages operate closer to the hardware.
Writing assembly was genuinely challenging, yet immensely rewarding. It provided a unique opportunity to see how things work at the most fundamental level, giving me a deeper understanding of how code gets executed by the CPU. Tasks such as managing memory manually, handling registers, and writing loops or conditionals in assembly helped me truly grasp concepts like bitwise operations, recursion, and iteration, and how these abstractions actually function under the hood. Seeing the advantages and disadvantages of these concepts from a low-level perspective was invaluable.
The book effectively demonstrates how simple and small components, like logic gates, come together to form complex systems—this concept, often referred to as emergence, was incredibly eye-opening. It’s fascinating to see how individual bits and operations combine to create something as versatile as a programming language or even a full-fledged operating system. It reminded me of how non-living atoms form living organisms.
The book does an excellent job of teaching fundamental programming concepts, such as recursion, iteration, and data manipulation, while also showing how and why these concepts work. By requiring readers to write them at the assembly level, it provides an appreciation for their elegance and power. Additionally, the step-by-step progression from simple circuits to complete systems effectively illustrates the incremental problem-solving approach required for tackling complex challenges.
What I particularly liked is how the book reframes the way you think about programming:
- It’s no longer just about "writing code," but understanding why certain design choices are made and how they impact the underlying hardware.
- Although the book isn’t intended for this purpose, it made me wish it included more real-world examples of programming design trade-offs and how these decisions manifest in low-level advantages or disadvantages. Such an addition would have tied its low-level explanations more explicitly to everyday programming challenges.
The steep learning curve—especially while writing in assembly—was both frustrating and rewarding. The challenge paid off by giving me a clearer understanding of the low-level operations and their connections to higher-level abstractions. Even though assembly was tough, the experience was invaluable and felt like a rite of passage for anyone interested in understanding computers at their core.
This book has laid a strong foundation for my journey in game and engine development with C/C++. Many of the concepts I learned, such as memory management and low-level programming, are directly applicable to building efficient and performant systems. Understanding how abstractions are built on top of hardware processes will help me make more informed decisions when working with tools like OpenGL or Vulkan.
In conclusion, Introduction to Computing Systems is an excellent resource for anyone who wants to dive deep into computer systems and see how they function from the ground up. While the C and C++ lessons are not enough to fully learn the languages, the perspective this book provides will forever change how you approach programming and problem-solving. I highly recommend it, especially if you’re passionate about understanding the inner workings of computers and want to become a more deliberate programmer.
1. The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie
Start Date: 2025-01-24
Hold Date: 2025-02-13
Status: Hold
Progression: 65%
Study Time: ~50 Hours
Repo: My Solutions of The C Programming Language
While studying The C Programming Language by Kernighan and Ritchie, I realized that the book is more of a documentation of C itself rather than a teaching guide for beginners. Although I learned some valuable things, I didn’t feel like my overall familiarity with C improved significantly. Additionally, I found the exercises quite challenging, especially in the last three chapters.
Therefore, I’ve decided not to continue with the remaining chapters and instead start C Programming: A Modern Approach by K. N. King, as I’ve heard it's better suited for learning C in a more comprehensive and beginner-friendly manner. My goal is to complete this book to solidify my understanding of C before moving on to more advanced topics.
-
Computer Systems: A Programmer's Perspective, Third Edition by Randal E. Bryant and David R. O'Hallaron.
Status: Hold
Repo : My Solutions to the Computer Systems: A Programmer's Perspective, Third Edition
As far as I can see from the questions I have read and solved so far from this book, it will be useful for me to read this book by really understanding it and solving all the questions. But this may take a little longer. On the other hand, I think it would be more suitable for my purpose to put something practical into practice right now. For this reason, I put the book on hold.
I welcome suggestions for resources, projects, or improvements to this repository. If you find any mistakes, have ideas, or want to contribute, feel free to reach out, open an issue, or submit a pull request!