{"id":13534424,"url":"https://github.com/sebcrozet/kiss3d","last_synced_at":"2025-05-14T08:06:12.572Z","repository":{"id":8963281,"uuid":"10703518","full_name":"sebcrozet/kiss3d","owner":"sebcrozet","description":"Keep it simple, stupid 3d graphics engine for Rust.","archived":false,"fork":false,"pushed_at":"2024-03-05T23:56:21.000Z","size":11400,"stargazers_count":1530,"open_issues_count":87,"forks_count":176,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-05-13T03:38:56.351Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://kiss3d.org","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sebcrozet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-06-15T07:41:40.000Z","updated_at":"2025-05-13T01:55:00.000Z","dependencies_parsed_at":"2024-01-03T04:06:43.785Z","dependency_job_id":"63078af4-f863-4093-9798-d8a98efd2249","html_url":"https://github.com/sebcrozet/kiss3d","commit_stats":{"total_commits":690,"total_committers":73,"mean_commits":9.452054794520548,"dds":0.263768115942029,"last_synced_commit":"1b7819c4be4e19f8960a98d4a9229ab4964c40f8"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebcrozet%2Fkiss3d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebcrozet%2Fkiss3d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebcrozet%2Fkiss3d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebcrozet%2Fkiss3d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sebcrozet","download_url":"https://codeload.github.com/sebcrozet/kiss3d/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101615,"owners_count":22014909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T07:01:32.698Z","updated_at":"2025-05-14T08:06:07.563Z","avatar_url":"https://github.com/sebcrozet.png","language":"Rust","funding_links":[],"categories":["Rust","Libraries"],"sub_categories":["Game development","Rust"],"readme":"# Kiss3d\n\n[![Crates.io](https://img.shields.io/crates/v/kiss3d.svg)](https://crates.io/crates/kiss3d)\n[![Docs](https://docs.rs/kiss3d/badge.svg)](https://docs.rs/kiss3d)\n[![License](https://img.shields.io/crates/l/kiss3d)](https://github.com/sebcrozet/kiss3d)\n\nKeep It Simple, Stupid 3d graphics engine.\n\nThis library is born from the frustration that today’s 3D\ngraphics library are either:\n\n* **Too low level**: you have to write your own shaders and opening a\n  window takes 8 hours, 300 lines of code and 10L of coffee.\n* High level, but **too hard to understand/use**: these libraries are made to\n  create beautiful photoreal (or close to it) animations or games.\n  They have many features; too many, in fact, if you just want to draw a few objects\n  on the screen with as little friction as possible.\n\n**kiss3d** is not designed to be feature-complete or fast.\nIt is designed to let you draw simple geometric figures and play with them\nwith as little friction as possible.\n\n## Features\n\n* WASM compatible.\n* Out of the box, open a window with a default arc-ball camera and a point light.\n* First-person camera available as well, and user-defined cameras are possible.\n* Render boxes, spheres, cones, cylinders, quads and lines simply\n* Change an object's color or texture.\n* Change an object's transform (we use [nalgebra](http://nalgebra.org) to do that).\n* Create basic post-processing effects.\n\nAs an example, creating a scene with a red, rotating cube with a light attached\nto the camera is as simple as (NOTE: this will **not** compile when targeting WASM):\n\n```rust\nextern crate kiss3d;\n\nuse kiss3d::nalgebra::{Vector3, UnitQuaternion};\nuse kiss3d::window::Window;\nuse kiss3d::light::Light;\n\nfn main() {\n    let mut window = Window::new(\"Kiss3d: cube\");\n    let mut c      = window.add_cube(1.0, 1.0, 1.0);\n\n    c.set_color(1.0, 0.0, 0.0);\n\n    window.set_light(Light::StickToCamera);\n\n    let rot = UnitQuaternion::from_axis_angle(\u0026Vector3::y_axis(), 0.014);\n\n    while window.render() {\n        c.prepend_to_local_rotation(\u0026rot);\n    }\n}\n```\n\nMaking the same example compatible with both WASM and native platforms is slightly more complicated because **kiss3d** must control the render loop:\n\n```rust\nextern crate kiss3d;\n\nuse kiss3d::light::Light;\nuse kiss3d::scene::SceneNode;\nuse kiss3d::window::{State, Window};\nuse kiss3d::nalgebra::{UnitQuaternion, Vector3};\n\nstruct AppState {\n    c: SceneNode,\n    rot: UnitQuaternion\u003cf32\u003e,\n}\n\nimpl State for AppState {\n    fn step(\u0026mut self, _: \u0026mut Window) {\n        self.c.prepend_to_local_rotation(\u0026self.rot)\n    }\n}\n\nfn main() {\n    let mut window = Window::new(\"Kiss3d: wasm example\");\n    let mut c = window.add_cube(1.0, 1.0, 1.0);\n\n    c.set_color(1.0, 0.0, 0.0);\n\n    window.set_light(Light::StickToCamera);\n\n    let rot = UnitQuaternion::from_axis_angle(\u0026Vector3::y_axis(), 0.014);\n    let state = AppState { c, rot };\n\n    window.render_loop(state)\n}\n```\n\nSome controls are handled by default by the engine (they can be overridden by the user):\n\n* `scroll`: zoom in / zoom out.\n* `left click + drag`: look around.\n* `right click + drag`: translate the view point.\n* `enter`: look at the origin (0.0, 0.0, 0.0).\n\n## Compilation\n\nYou will need the last stable build of the [rust compiler](http://www.rust-lang.org)\nand the official package manager: [cargo](https://github.com/rust-lang/cargo).\n\nSimply add the following to your `Cargo.toml` file:\n\n```\n[dependencies]\nkiss3d = \"0.32\"\n```\nNote: If your project already uses nalgebra, you'll need the same version used by `kiss3d`, or you may run into compatibility issues.\n\n\n## Contributions\nI’d love to see people improving this library for their own needs. However, keep in mind that\n**kiss3d** is KISS. One-liner features (from the user point of view) are preferred.\n\n## Acknowledgements\n\nThanks to all the Rustaceans for their help, and their OpenGL bindings.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebcrozet%2Fkiss3d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebcrozet%2Fkiss3d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebcrozet%2Fkiss3d/lists"}