Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrDIMAS/DmitrysEngine
[abandoned] C99 cross-platform 3D game engine with absolute minimum of external dependencies
https://github.com/mrDIMAS/DmitrysEngine
3d-game-engine c engine game-development game-engine math sound user-interface
Last synced: about 2 months ago
JSON representation
[abandoned] C99 cross-platform 3D game engine with absolute minimum of external dependencies
- Host: GitHub
- URL: https://github.com/mrDIMAS/DmitrysEngine
- Owner: mrDIMAS
- License: mit
- Created: 2018-12-09T12:13:52.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-07-28T13:57:18.000Z (over 5 years ago)
- Last Synced: 2024-11-10T02:52:22.208Z (2 months ago)
- Topics: 3d-game-engine, c, engine, game-development, game-engine, math, sound, user-interface
- Language: C
- Homepage:
- Size: 122 MB
- Stars: 152
- Watchers: 11
- Forks: 13
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- AwesomeCppGameDev - DmitrysEngine - platform 3D game engine with absolute minimum of external dependencies (Engines)
README
# Dmitry's Engine
Experimental C99 cross-platform single-compilation-unit (SCU) 3D game engine with absolute minimum of external dependencies.
Please note, that this engine is at early development stage and some features maybe very brittle.
## Projects on this engine
* [Shooter](https://github.com/mrDIMAS/Shooter) - 3d shooter game that I writing using this engine.## Tutorials
* Can be found in `tutorials` folder. Why there is only few tutorials? Because API of engine is not stabilized yet.## Features
* Single compilation unit - no need to build as separate library: just add `de_main.h` and `de_main.c` to your project.
* C99 with full compatibility with C++.
* FBX support - both ASCII and binary
* Scene graph with these nodes:
* Base (pivot)
* Mesh
* Light
* Camera
* Particle system
* Automatic assets (resources) management
* Textures
* Models
* Sound buffers
* Modern rendering techniques, renderer based on OpenGL 3.3 Core.
* Deferred shading
* Normal mapping
* Skeletal animation
* Shadows
* Instancing
* Frustum culling
* Particle systems (very simple for now)
* Sound
* 2D + 3D
* WAV format support
* Streaming for large sounds
* TTF fonts support (compound characters support is not implemented yet)
* Advanced GUI (inspired by WPF) with declarative UI creation using designated initializers with these widgets:
* Window
* Text box
* Text block
* Border
* Button
* Scroll bar
* Scroll viewer
* Scroll content presenter
* Canvas
* Grid
* Stack panel
* Slide selector
* Image
* Check box
* Path finding (classic A* algorithm)
* TGA image loading
* Ray casting
* Position-based physics (GJK-EPA based)
* Built-in save/load functionality via object visitor - state of engine can be saved/loaded just in a single call.
* Documentation - almost every function of the engine has description in Doxygen format.
* Extremely fast compilation, thus very low iteration times - feature can be tested very fast.
* Easy to hack and modify## Screenshots
![Why](pics/game1.png?raw=true "Game 1")
![Why](pics/game2.png?raw=true "Game 2")
![Why](pics/menu1.png?raw=true "Menu 1")
![Why](pics/menu2.png?raw=true "Menu 1")
## Planned features
* Renderer improvements
* Materials (probably PBR)
* Performance optimizations
* Levels of details (LODs)
* Instancing optimizations (batching, etc.)
* GUI improvements
* Styles
* More widgets
* Async resource loading
* Stability
* Support more 3D formats (obj, 3ds, etc)
* Compound character support in fonts.
* Terrain
* Editor## Dependencies
- miniz_tinfl - to decompress FBX compressed data.## Code statistics
- ~22500 significant lines of code
- Pure C99## Supported compilers
### Compiling as C
If compiling as C, you will need C99-compatible compiler:
- Windows: Visual Studio 2013 or higher, mingw 4.8.1 or higher
- Linux: GCC 4.5 or higherIf you using lower version of Visual Studio, then you should compile engine as C++, because lower versions supports only C89.
### Compiling as C++
If compling as C++, you will need C++98 or higher compiler.## How to build?
### WindowsRequired packages: None.
Options for linker: `opengl32.lib; dsound.lib; gdi32.lib; dxguid.lib; winmm.lib`
### Linux
Required packages: `libx11-dev, mesa-common-dev, libgl1-mesa-dev, libxrandr-dev.`Options for linker: `-lGL -lpthread -lasound -lX11 -lXrandr`
## Why C?
* Very fast compilation compared to C++
* Very simple - what you have is just plain memory and procedures that operates on it.
* Strict ABI
* Small but enough number of features - nothing distracts you from your actual goal.
* Why not one of those other fancy languages? Let Benjamin Franklin says for me: "He who sacrifices freedom for security deserves neither."And of course:
![Why](pics/why.png?raw=true "Why")
## Why engine called in that way?
At very beginning engine was called Dark Engine, but then I found that there is already one engine with that name (Thief game series using it). Then I started to looking at some fancy adjectives that could fit into `de` prefix that I was already using for my functions, and I haven't found anything suitable. And then I said - "fuck it, let it be like Dmitry's Engine, I'm too tired of fancy names".