Let's break down what's exactly going on when you use a transform handle. For this example, I would like to use Blenders:
<blendertransformhandke>
When you click and hold down the mouse button, the object _appears_ to move with it. You lock it to a specific axis, based
on which handle you grab - or do it all freeform. What's going on here? How is it able to associate movement on the screen with
movements in the scene?
The keyword is _view matrices_. Remember that for view matrices, it transforms from NDC to camera space. However, think about how transform handles work - it's somehow associating
the screen position of the _object_ with the screen position of the _cursor_. So we need some way to reverse the view matrix, and
get the location of the object on the screen, or to put it more bluntly, in the _NDC_.
### Implementation
## Selecting Objects
Selecting objects on the screen is something else that is widely used, but another rare
talent alongside implementing transform handles. It's practically required for any kind of editing software,
much less those needed by 3D game engines. There are three main techniques for
handling this:
### Depth-based
### Color-based
### Occlusion Queries
## Graphical Interface
This is something not strictly graphics related, but I want to point out some common choices
it's an extremely robust, supported and battle tested user interface. Performance is almost never an issue, and it supports
a lot of platforms out of the box.
It should be noted that there is a common misconception that Qt forces your programs to be FOSS, which is
a non-option for many games. This is FUD, because as long as you link Qt libraries externally you are free to keep your
source code as closed as you want. And let me tell you, you will be using tens of megabytes worth of Qt libraries - there is very
little reason to link it statically. If you're really paranoid, you can pay the Qt
company an insubordinate amount of money for a proprietary licensed option... but why?
### Dear Imgui
Using Qt might not always be the best option for you, and "dear imgui" is becoming an increasingly popular option for many games, from indie to AAA games such as the upcoming GTA VI.
While "dear imgui" is suited to debug UIs for developers, it tends to fall apart when writing end-user UIs (which includes content creation tools)
however it is continuing to keep improving in this regard, especially with the docking branch.
With enough work, it can get pretty enough too, which you check out in the screenshot thread.