Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sebcrozet/kiss3d
Keep it simple, stupid 3d graphics engine for Rust.
https://github.com/sebcrozet/kiss3d
Last synced: 25 days ago
JSON representation
Keep it simple, stupid 3d graphics engine for Rust.
- Host: GitHub
- URL: https://github.com/sebcrozet/kiss3d
- Owner: sebcrozet
- License: bsd-3-clause
- Created: 2013-06-15T07:41:40.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-03-05T23:56:21.000Z (8 months ago)
- Last Synced: 2024-10-01T12:21:32.364Z (about 1 month ago)
- Language: Rust
- Homepage: http://kiss3d.org
- Size: 10.9 MB
- Stars: 1,490
- Watchers: 34
- Forks: 172
- Open Issues: 84
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
- awesome-game-engine-dev - Kiss3D - Keep it simple, stupid 3D graphics engine. (Libraries / Rust)
- awesome-ccamel - sebcrozet/kiss3d - Keep it simple, stupid 3d graphics engine for Rust. (Rust)
README
# Kiss3d
[![Crates.io](https://img.shields.io/crates/v/kiss3d.svg)](https://crates.io/crates/kiss3d)
[![Docs](https://docs.rs/kiss3d/badge.svg)](https://docs.rs/kiss3d)
[![License](https://img.shields.io/crates/l/kiss3d)](https://github.com/sebcrozet/kiss3d)Keep It Simple, Stupid 3d graphics engine.
This library is born from the frustration that today’s 3D
graphics library are either:* **Too low level**: you have to write your own shaders and opening a
window takes 8 hours, 300 lines of code and 10L of coffee.
* High level, but **too hard to understand/use**: these libraries are made to
create beautiful photoreal (or close to it) animations or games.
They have many features; too many, in fact, if you just want to draw a few objects
on the screen with as little friction as possible.**kiss3d** is not designed to be feature-complete or fast.
It is designed to let you draw simple geometric figures and play with them
with as little friction as possible.## Features
* WASM compatible.
* Out of the box, open a window with a default arc-ball camera and a point light.
* First-person camera available as well, and user-defined cameras are possible.
* Render boxes, spheres, cones, cylinders, quads and lines simply
* Change an object's color or texture.
* Change an object's transform (we use [nalgebra](http://nalgebra.org) to do that).
* Create basic post-processing effects.As an example, creating a scene with a red, rotating cube with a light attached
to the camera is as simple as (NOTE: this will **not** compile when targeting WASM):```rust
extern crate kiss3d;use kiss3d::nalgebra::{Vector3, UnitQuaternion};
use kiss3d::window::Window;
use kiss3d::light::Light;fn main() {
let mut window = Window::new("Kiss3d: cube");
let mut c = window.add_cube(1.0, 1.0, 1.0);c.set_color(1.0, 0.0, 0.0);
window.set_light(Light::StickToCamera);
let rot = UnitQuaternion::from_axis_angle(&Vector3::y_axis(), 0.014);
while window.render() {
c.prepend_to_local_rotation(&rot);
}
}
```Making the same example compatible with both WASM and native platforms is slightly more complicated because **kiss3d** must control the render loop:
```rust
extern crate kiss3d;use kiss3d::light::Light;
use kiss3d::scene::SceneNode;
use kiss3d::window::{State, Window};
use kiss3d::nalgebra::{UnitQuaternion, Vector3};struct AppState {
c: SceneNode,
rot: UnitQuaternion,
}impl State for AppState {
fn step(&mut self, _: &mut Window) {
self.c.prepend_to_local_rotation(&self.rot)
}
}fn main() {
let mut window = Window::new("Kiss3d: wasm example");
let mut c = window.add_cube(1.0, 1.0, 1.0);c.set_color(1.0, 0.0, 0.0);
window.set_light(Light::StickToCamera);
let rot = UnitQuaternion::from_axis_angle(&Vector3::y_axis(), 0.014);
let state = AppState { c, rot };window.render_loop(state)
}
```Some controls are handled by default by the engine (they can be overridden by the user):
* `scroll`: zoom in / zoom out.
* `left click + drag`: look around.
* `right click + drag`: translate the view point.
* `enter`: look at the origin (0.0, 0.0, 0.0).## Compilation
You will need the last stable build of the [rust compiler](http://www.rust-lang.org)
and the official package manager: [cargo](https://github.com/rust-lang/cargo).Simply add the following to your `Cargo.toml` file:
```
[dependencies]
kiss3d = "0.32"
```
Note: If your project already uses nalgebra, you'll need the same version used by `kiss3d`, or you may run into compatibility issues.## Contributions
I’d love to see people improving this library for their own needs. However, keep in mind that
**kiss3d** is KISS. One-liner features (from the user point of view) are preferred.## Acknowledgements
Thanks to all the Rustaceans for their help, and their OpenGL bindings.