three 0.1.0

Three.js inspired 3D engine in Rust


Build Status Docs

Totally not inspired Rust 3D library! Ok, maybe, just a tiny bit... by Three.JS.


Aviator CarObj

Motivation and Goals

  1. Ergonomics is first priority. Being able to prototype quickly and code intuitively is more important than capturing all the 3D features. We already have a solid foundation with gfx-rs, so let's make some use of it by providing a nice higher-level abstraction.
  2. Follow "Three.JS" - this is simpler than coming up with a brand new API (like kiss3d), yet instantly familiar to a large portion of Web develper. Some deviations from the original API are imminent.
  3. Explore the capabilities of Rust to mimic deep object-oriented nature of JavaScript. This is a tough challenge, involving channels, defer implementations, blood, and sweat.
  4. Battle-test the genmesh library. Being able to create cubes, spheres, cylinders (and more) with one-liners allows for nice proceduraly generated demos.
  5. Play with Component-Graph System concept, provided by froggy. It's a good fit for the scene graph implementation that is fast and usable.

Interestingly, you can observe an new trend in rust-gamedev community to mimic existing libraries: Amethyst was created to be Rust version of Autodesk Stingray engine (formely Bitsquid), ggez is a re-interpretation of Love2D engine, and now three-rs attempting to capture Three.JS usability. This is not to say that we failed for find our own path, I just see the current step inevitable.