Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kooparse/mogwai
Graphic utility used to manipulate objects in 3D for scene editing (commonly called Gizmo).
https://github.com/kooparse/mogwai
game-engine gamedev gizmo graphics-engine scene-editor zig
Last synced: 26 days ago
JSON representation
Graphic utility used to manipulate objects in 3D for scene editing (commonly called Gizmo).
- Host: GitHub
- URL: https://github.com/kooparse/mogwai
- Owner: kooparse
- Created: 2020-11-04T15:49:44.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-11-03T11:46:24.000Z (about 2 years ago)
- Last Synced: 2024-08-04T04:06:26.682Z (3 months ago)
- Topics: game-engine, gamedev, gizmo, graphics-engine, scene-editor, zig
- Language: Zig
- Homepage:
- Size: 955 KB
- Stars: 14
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zig - mogwai🗒️Graphic utility used to manipulate objects in 3D for scene editing (commonly called Gizmo)
README
# Mogwai
Graphic utility used to manipulate objects in 3D for scene editing (commonly called Gizmo).
It's a straightforward and simple Gizmo, all the manipulation is computed in this library
while it gives you all the verticies for your renderer; At the end,
you'll get a decomposed matrix (three vec3 for translation/rotation/scale).This library uses only [zalgebra](https://github.com/kooparse/zalgebra) and the `std`!
## Examples
```zig
usingnamespace @import("mogwai");pub fn main () void {
var gizmo = Mogwai(.{
.screen_width = 800,
.screen_height = 600,
.snap_axis = 0.5,
.snap_angle = 5
});// Get all vertices for your renderer.
const xy_panel = gizmo.meshes.move_panels.xy;
const yz_panel = gizmo.meshes.move_panels.yz
// See https://github.com/kooparse/mogwai/blob/master/exemples/_glfw_opengl.zig#L62-L73
// for all meshes.// Mode is an enum containing all different modes
// for the gizmo (move, rotate, scale, none).
var gizmo_mode = Mode.Move;while(true) {
// After pulling cursor state and positions:
gizmo.setCursor(pos_x, pos_y, is_pressed);
// After updating the view matrix (camera moving...).
gizmo.setCamera(view, proj);// You just have to pass a mode and the model matrix from the
// selected object from your scene.
if (gizmo.manipulate(target_model_matrix, gizmo_mode)) |result| {
switch (result.mode) {
Mode.Move => {
target.transform.position = result.position;
},
Mode.Rotate => {
target.transform.rotation = result.rotation.extractRotation();
},
Mode.Scale => {
target.transform.scale = result.scale;
},
else => {},
}
}// Draw all the meshes
your_renderer.draw(&yz_panel, gizmo.is_hover(GizmoItem.PanelYZ));
}
}
```
See https://github.com/kooparse/mogwai/blob/master/exemples/_glfw_opengl.zig for a real exemple.## Documentation
### Config
Field | Type | Description
------------ | ------------- | -------------
screen_width | i32 | Width of the screen (required)
screen_height | i32 | Height of the screen (required)
dpi | i32 | Pixel ratio of your monitor
snap | ?f32 | Snap when dragging gizmo, value is equals to floor factor
arcball_radius | f32 | Radius of the rotation circles
arcball_thickness | f32 | Width of the rotation circle borders
panel_size| f32 | The width/height of panels
panel_offset| f32 | Offset of the panels from the origin position
panel_width| f32 | Plans width for panels
axis_length | f32 | Length of arrows
axis_size | f32 | The width/height of arrows
scale_box_size | f32 | Size of the scaler boxes## Contributing to the project
Don’t be shy about shooting any questions you may have. If you are a beginner/junior, don’t hesitate, I will always encourage you. It’s a safe place here. Also, I would be very happy to receive any kind of pull requests, you will have (at least) some feedback/guidance rapidly.
Behind screens, there are human beings, living any sort of story. So be always kind and respectful, because we all sheer to learn new things.
## Thanks
This project is inspired by [tinygizmo](https://github.com/ddiakopoulos/tinygizmo) and [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo).