3D Game Engine written in Rust (development stage)
Dotrix has a flat linear ECS (Entity Component System) in its core, designed for fast querying of entities and their components.
- Entities in Dotrix are virtual abstractions, identified by
EntityIdcomponent containing numerical ID. Each entitiy agregates constant number of components.
- Components are regular Rust structures.
- Systems are Rust functions, implementing the core logic of a game.
- Services are Rust objects available through systems, providing some key features or access to global resources, like Assets, Input or Render management.
Editor application is under active development in the separate repository lowenware/dotrix-editor.
The best place to start is to review examples distributed with the engine. All examples are grouped under examples/ folder. Later when API becomes more or less stable we will prepare a Book for a quick start.
Features: input, skeletal animation, light, terrain, player control
cargo run --release --example demo
Features: UI and EGUI integration, skeletal animation, light, camera control, transformation
cargo run --release --example egui
Features: skeletal animation, light, camera control
cargo run --release --example fox
Features: marching cubes, camera control, UI
cargo run --release --example marching_cubes
Features: skybox, camera control
cargo run --release --example skybox
Migration to WGLS shaders is pending
Dotrix is distributed with both sources and precompiled to SPIR-V shaders. So until you make a change in a shader's code, you won't need to compile it. We are looking forward integration with naga, but until it is not ready, there are two possibilities of how to deal with shaders.
You can compile GLSL shaders into SPIR-V using glslang. This is the way how we compile them for releases.
You can also compile shaders at a runtime, which is very helpful during development using
shaderc feature. To make it working, you will need a recent version of
library which can be built using cargo or obtained as a part of the
Once you have it, don't forget to enable the feature during compilation:
cargo run --release --features shaderc --example demo