https://github.com/crocidb/annileen
a toy 3d game engine with voxel support
https://github.com/crocidb/annileen
3d-engine 3d-game-engine directx12 engine game-engine gamedev hacktoberfest opengl voxel-terrain vulkan
Last synced: 11 months ago
JSON representation
a toy 3d game engine with voxel support
- Host: GitHub
- URL: https://github.com/crocidb/annileen
- Owner: CrociDB
- License: mit
- Created: 2018-04-09T02:23:43.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2023-10-09T17:45:15.000Z (over 2 years ago)
- Last Synced: 2025-04-04T01:01:37.248Z (about 1 year ago)
- Topics: 3d-engine, 3d-game-engine, directx12, engine, game-engine, gamedev, hacktoberfest, opengl, voxel-terrain, vulkan
- Language: C++
- Homepage:
- Size: 59.6 MB
- Stars: 26
- Watchers: 6
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README

[](https://travis-ci.com/CrociDB/annileen)
This is a toy 3D game engine created for study purposes. It's written in C++ and uses **bgfx** for rendering. Currently runs on **Windows** and **Linux** and supports **OpenGL 2.1**, **DirectX 9**, **DirectX 11**, **DirectX 12** and **Vulkan**.
It's still on an early stage of development, but already supports:
- asset management
- 3d model loading
- basic blinn-phong shading
- shadow maps
- simple scene editor
- minecraft-style voxels

# Dependencies
- premake5
- python 3.8 / pip3
# Build
First of all, update all submodules and download Python dependencies:
```
git submodule init && git submodule update
python -m pip install -r tools/requirements.txt
```
## Windows
Generate the Visual Studio solution:
```
premake5 vs2019
```
Open the solution located at `.\build\vs2019\annileen-engine.sln` and build.
Now, generate the assets:
```
python tools/asset_tools.py
```
Now you can run the projects on Visual Studio.
## Linux
Install dependecies:
```
sudo apt install libglu1-mesa-dev freeglut3-dev mesa-common-dev xorg-dev libglew-dev libx11-dev libxrandr-dev libxcursor-dev libxinerama-dev
```
Build:
```
premake5 gmake
make
python tools/asset_tools.py
```
## Mac OS
Still in development.
# Asset Tools
In order to build all the assets available at the `./assets` folder, run:
```
python tools/asset_tools.py
```
It will generate a `build_assets` folder in the project root and will also create a `assets.toml` with a description of all the assets and their types.
All the other the specific tools will accept an asset name, no need to include the full path of the file, it will find the asset within the `asset` folder and build it to its corresponding built folder, but **note**: it will not update the `assets.toml` descriptor file.
### Watchdog
Run `python tools/asset_tools.py -w` to launch a service that will keep watching for asset changes and will recompile it automatically.
## Shader Tool
```
python tools/shader.py
```
```
usage: shader.py [-h] [-s [SHADER [SHADER ...]]] [-f] [-a] [-p {auto,android,asm.js,ios,linux,orbis,osx,windows}]
[-m {auto,s_3_0,s_4_0,s_4_0_level,s_5_0,metal,pssl,spirv,120}]
Annileen Shader Tools
optional arguments:
-h, --help show this help message and exit
-s [SHADER [SHADER ...]], --shader [SHADER [SHADER ...]]
compiles the shader specified
-f, --force force rebuild
-a, --all compiles all the available shaders
-p {auto,android,asm.js,ios,linux,orbis,osx,windows}, --platform {auto,android,asm.js,ios,linux,orbis,osx,windows}
compiles the mesh specified
-m {auto,s_3_0,s_4_0,s_4_0_level,s_5_0,metal,pssl,spirv,120}, --model {auto,s_3_0,s_4_0,s_4_0_level,s_5_0,metal,pssl,spirv,120}
shader model
```
If no `platform` is specified, it will build for tre host platform. The default build model is OpenGL (GLSL), for other APIs, use:
- DirectX: `s_5_0`
- Vulkan: `spirv`
- Metal: `metal`
## Mesh Tool
```
python tools/mesh.py
```
```
usage: mesh.py [-h] [-m [MESH [MESH ...]]] [-a] [-f] [-v VIEW]
Annileen Mesh Tools
optional arguments:
-h, --help show this help message and exit
-m [MESH [MESH ...]], --mesh [MESH [MESH ...]]
compiles the mesh specified
-a, --all compiles all the available meshes
-f, --force force rebuild
-v VIEW, --view VIEW view the specified mesh
```
## Texture Tool
```
python tools/texture.py
```
```
usage: texture.py [-h] [-t [TEXTURE ...]] [-a] [-f] [-v VIEW]
Annileen Texture Tools
options:
-h, --help show this help message and exit
-t [TEXTURE ...], --texture [TEXTURE ...]
compiles the texture specified
-a, --all compiles all the available textures
-f, --force force compiling all textures
-v VIEW, --view VIEW view the specified texture
```
## Cubemap Tool
```
python tools/cubemap.py
```
```
usage: cubemap.py [-h] [-c [CUBEMAP [CUBEMAP ...]]] [-a] [-v VIEW]
Annileen Cubemap Tools
optional arguments:
-h, --help show this help message and exit
-c [CUBEMAP [CUBEMAP ...]], --cubemap [CUBEMAP [CUBEMAP ...]]
compiles the cubemap specified
-a, --all compiles all the available cubemaps
-v VIEW, --view VIEW view the specified cubemap
```
## Font Tool
```
python tools/font.py
```
```
usage: font.py [-h] [-f [FONT [FONT ...]]] [-a]
Annileen Font Tools
optional arguments:
-h, --help show this help message and exit
-f [FONT [FONT ...]], --font [FONT [FONT ...]]
compiles the font specified
-a, --all compiles all the available fonts
```
# Running
When built, the project will generate binaries for the examples. Simply run the example binaries from the root directory.
# Contributors
- Bruno Croci - [CrociDB](https://twitter.com/CrociDB)
- Teofilo Dutra - [teodutra](https://twitter.com/teodutra)
# License
Annileen is licensed under the [MIT License](/LICENSE.md)
# Third Party
Annileen uses the following libraries:
- [bgfx](https://github.com/bkaradzic/bgfx) - [BSD 2-Clause](https://github.com/bkaradzic/bgfx/blob/master/LICENSE)
- [toml11](https://github.com/ToruNiina/toml11) - [MIT License](https://github.com/ToruNiina/toml11/blob/master/LICENSE)
- [glm](https://github.com/g-truc/glm) - [The Happy Bunny License/MIT](https://github.com/g-truc/glm/blob/master/copying.txt)
- [glfm](https://github.com/glfw/glfw) - [zlib License](https://github.com/glfw/glfw/blob/master/LICENSE.md)
- [fmt](https://github.com/fmtlib/fmt) - [License](https://github.com/fmtlib/fmt/blob/master/LICENSE.rst)
- [PerlinNoise](https://github.com/Reputeless/PerlinNoise) - [MIT License](https://github.com/Reputeless/PerlinNoise/blob/master/LICENSE)
- [assimp](https://github.com/assimp/assimp) - [BSD-Custom License](https://github.com/assimp/assimp/blob/master/LICENSE)
- [fmt](https://github.com/fmtlib/fmt) - [Custom License](https://github.com/fmtlib/fmt/blob/master/LICENSE.rst)