raygizmo
was designed as an auxiliar module for raylib to create simple interactive gizmo gadget to perform basic object transformation (rotation and translation).
NOTE: raygizmo is a single-file header-only library (despite its internal dependency on raylib), so, functions definition AND implementation reside in the same file raygizmo.h
, when including raygizmo.h
in a module, RAYGIZMO_IMPLEMENTATION
must be previously defined to include the implementation part of raygizmo.h
BUT only in one compilation unit, other modules could also include raygizmo.h
but RAYGIZMO_IMPLEMENTATION
must not be defined again.
NOTE: Current raygizmo implementation is intended to work with raylib-5.0 and PLATFORM_DESKTOP
In a simplest case gizmo can be used like this:
#define RAYGIZMO_IMPLEMENTATION
#include "raygizmo.h"
int main(void) {
InitWindow(800, 450, "raygizmo");
Camera3D camera;
camera.fovy = 45.0f;
camera.target = (Vector3){0.0f, 0.0f, 0.0f};
camera.position = (Vector3){5.0f, 5.0f, 5.0f};
camera.up = (Vector3){0.0f, 1.0f, 0.0f};
camera.projection = CAMERA_PERSPECTIVE;
Model model = LoadModelFromMesh(GenMeshTorus(0.3, 1.5, 16.0, 16.0));
RGizmo gizmo = rgizmo_create();
while (!WindowShouldClose()) {
BeginDrawing();
{
Vector3 position = {
model.transform.m12, model.transform.m13, model.transform.m14};
rgizmo_update(&gizmo, camera, position);
model.transform = MatrixMultiply(model.transform, rgizmo_get_tranform(gizmo, position));
ClearBackground(BLACK);
rlEnableDepthTest();
BeginMode3D(camera);
{
DrawModel(model, (Vector3){0.0, 0.0, 0.0}, 1.0, PURPLE);
}
EndMode3D();
rgizmo_draw(gizmo, camera, position);
}
EndDrawing();
}
rgizmo_unload();
UnloadModel(model);
CloseWindow();
return 0;
}
More complex example could be built and run like this (make sure you have libraylib and raylib headers in your lib and include paths):
gcc -o ./examples/raygizmo ./examples/raygizmo.c -lraylib -lm -lpthread -ldl && ./examples/raygizmo