Dieses Projekt ist eine leichte, eigenständige Bibliothek für die Gizmo-Bearbeitung, die häufig in vielen Spiele-Engines zu finden ist. Es enthält Mechanismen zur Manipulation der 3D-Position, -Rotation und -Skalierung. Die in C++11 implementierte Bibliothek führt kein direktes Rendering durch und stellt stattdessen einen Frame-Puffer von Welt-Raum-Dreiecken bereit.
Ein enthaltenes Beispiel basiert auf GLFW (mit einem OpenGL 3.3-Kontext). Zu den bekannten Einschränkungen gehören fest codierte Annahmen über ein rechtshändiges Y-oben-Koordinatensystem. Während die Gizmos mit Scheitelpunktnormalen ausgestattet sind, führt das Beispiel keine ausgefallene Schattierung durch. Darüber hinaus ist bekannt, dass die Mauseingabe bei bestimmten Gizmos bei extremen Interaktions-Streifwinkeln zu anomalen Ergebnissen führt.
Dieses Projekt entstand aus leichter Frustration mit anderen Gizmo-Bibliotheken im Sofortmodus. Anstelle von 4x4-Matrizen und Eulerwinkeln stellt die Bibliothek eine rigid_transform
bereit, die aus einer 3D-Position, einer Rotationsquaternion und einer Skalierung besteht. Die Bibliothek ist in rund 1200 Codezeilen implementiert, darunter auch eine komplette 3D-Mathematikbibliothek in ~400 LoC – linalg.h. Alternativen sind ImGuizmo und Im3D. Tinygizmo passt zwischen diesen Projekten, da es vollständig eigenständig ist (keine Abhängigkeit von Dear ImGui) und im öffentlichen Bereich bereitgestellt wird.
snap_
Werte in der Struktur gizmo_application_state
fest.update(...)
und draw()
aufrufen)ctrl-t
um das Übersetzungs-Gizmo zu aktivierenctrl-r
um das Rotations-Gizmo zu aktivierenctrl-s
um das Skalierungs-Gizmo zu aktivierenctrl-l
um zwischen globalen und lokalen Transformationsmodi umzuschaltenDieses Projekt wäre ohne Referenzimplementierungen im gemeinfreien Workbench-Projekt nicht möglich gewesen.
Hierbei handelt es sich um kostenlose und unbelastete Software, die der Öffentlichkeit zugänglich gemacht wird. Weitere Informationen finden Sie unter http://unlicense.org