-
Notifications
You must be signed in to change notification settings - Fork 6
3D and 2D Visualization
When you open a virtual controller's configuration page, the first tab shows an interactive controller visualization. PadForge selects the appropriate view based on the virtual controller type. The visualization provides real-time visual feedback of every button press, stick movement, trigger pull, key press, or MIDI note as they happen.


PadForge automatically selects the visualization based on the controller type and settings:
| Controller Type | Condition | View Shown | 2D/3D Toggle |
|---|---|---|---|
| Xbox 360 | Default | 3D controller model | Visible (click to switch) |
| Xbox 360 | "Use 2D View" enabled in Settings | 2D overlay view | Visible (click to switch) |
| DualShock 4 | Default | 3D controller model | Visible (click to switch) |
| DualShock 4 | "Use 2D View" enabled in Settings | 2D overlay view | Visible (click to switch) |
| DirectInput | Xbox 360 or DS4 preset | 3D or 2D model matching the preset | Visible (click to switch) |
| DirectInput | Custom preset | Schematic view (procedural) | Hidden |
| Keyboard+Mouse | Always | Keyboard and mouse preview | Hidden |
| MIDI | Always | Piano keyboard and CC sliders | Hidden |
When a view does not support 2D/3D toggling, only the appropriate view is shown and the toggle button is hidden.
The 3D view renders a detailed Xbox 360 or DualShock 4 controller model using HelixToolkit.WPF. The model shown matches your virtual controller type: Xbox 360 slots show the Xbox model, DualShock 4 slots show the DS4 model, and DirectInput slots with a gamepad preset show the model matching that preset.
| Action | Mouse | Touch |
|---|---|---|
| Rotate | Left-click and drag | Single-finger drag |
| Zoom | Scroll wheel | Two-finger pinch |
| Pan | Right-click and drag | Two-finger drag (midpoint-based) |
| Reset View | Click "Reset View" button | Click "Reset View" button |
Rotation is turntable-style: horizontal dragging rotates the model around the vertical axis (yaw), and vertical dragging tilts it forward/backward (pitch). Pitch is clamped to 60 degrees in either direction to keep the model visible. The sensitivity is 0.5 degrees per pixel of mouse or touch movement.
Tips for the best 3D view angle:
- Start from the default front-facing view and make small rotations to see a specific area (such as the triggers or bumpers on top).
- If you lose your bearings, click "Reset View" to snap back to the default angle.
- Zoom in to inspect specific button placements before using click-to-map.
- Use right-click drag (or two-finger drag on touch) to pan the camera if the area you want to see is off-center after zooming.
The 3D model responds in real time to your physical controller input:
- Buttons swap to an accent-colored material (blue) when pressed, and return to their default color when released. Multi-mesh buttons (such as the Xbox face buttons with their colored overlays) highlight together.
- Thumbsticks physically tilt on their pivot points to show the current stick position. The tilt angle is proportional to the deflection. Additionally, the stick ring material gradient-blends from default to accent color based on how far the stick is deflected.
- Triggers rotate downward on their pivot points to show how far they are pulled, and their material gradient-blends toward the accent color based on the trigger value (0 to 1).
- D-Pad directions swap to accent-colored material when active.
You can click directly on any button, trigger, D-Pad direction, or stick ring on the 3D model to start recording a mapping for that output. After clicking, press a button or move an axis on your physical controller, and PadForge will automatically assign it. This is a quick alternative to using the Button and Axis Mappings grid.
Stick ring quadrant detection: When you click on a stick ring, PadForge determines which axis direction to map based on where you click:
- Click the center of the stick to map the stick button (L3/R3).
- Click the right/left side to map the positive/negative X axis.
- Click the top/bottom to map the negative/positive Y axis.
When using the "Map All" feature on the Button and Axis Mappings page, the 3D model highlights each output in sequence with an orange flash at 400ms intervals. For stick axes, a directional arrow and a quadrant wedge overlay appear on the stick ring to indicate which direction is being mapped. The flash continues until that mapping is recorded, then moves to the next output.
You can toggle between the 3D model and a 2D overlay view by clicking the view mode button in the top-right corner of the Controller tab. The 2D view uses PNG image overlays positioned on a flat controller diagram. Each button and axis region highlights in real time, just like the 3D view.
The 2D view supports the same interactions as the 3D view: live input highlighting, click-to-map, hover previews, and Map All flash animation. All operate on the same target names and produce the same mapping results.
The 2D view can be useful on systems where 3D rendering performance is limited, or if you simply prefer a flat layout. Your preference is saved in Settings and persists across sessions.
Stick interaction in 2D: Stick overlays translate (slide) to follow stick input rather than tilting like the 3D model. When hovering over a stick ring, a quadrant wedge highlight appears showing which axis direction you would map by clicking. The center of the stick ring maps the stick button (L3/R3), while the four edges map the X/Y positive and negative axes.
Trigger fill effect: Triggers display as a "gas tank" fill that rises from the bottom of the trigger image as you pull the trigger. At zero the trigger appears empty; at full it shows the complete highlight overlay.
When a slot is set to DirectInput output with the Custom preset, the visualization switches to a procedurally-generated schematic view instead of a standard controller model. This schematic is built dynamically from your DirectInput configuration and automatically rebuilds whenever you change the axis, button, or POV counts.
- Thumbsticks — Shown as circular stick widgets with crosshair lines and a position dot that tracks the current axis values. One for each stick defined by the ThumbstickCount setting (up to 4 sticks). Each stick consumes two axes (X and Y).
- Triggers — Shown as vertical bar indicators that fill from bottom to top based on the axis value. One for each trigger defined by the TriggerCount setting (up to 4 triggers). Sticks and triggers share a pool of 8 axes total.
- POV hats — Shown as directional compass indicators with a triangular arrow that rotates to the current POV angle. One for each POV defined by the PovCount setting (up to 4 POVs). If there is only one POV, it is labeled "D-Pad"; with multiple POVs they are numbered.
- Buttons — Displayed as a grid of numbered circles (8 per row) that fill with accent color when pressed. Sized to match the ButtonCount setting (up to 128 buttons).
All schematic elements support click-to-map and Map All flash animation. For sticks, click position determines which axis direction to map (same quadrant detection as the 3D/2D views). For POVs, click position determines which cardinal direction to map (Up, Down, Left, or Right).
If you use an Xbox 360 or DualShock 4 DirectInput preset instead of Custom, the visualization shows a standard controller model matching that layout, with the 2D/3D toggle available.
When a slot is set to the Keyboard+Mouse type, the Controller tab shows a keyboard and mouse visualization instead of a controller model. The 2D/3D toggle is hidden.
- Keyboard layout — A full ANSI QWERTY keyboard (including numpad) is displayed at the top of the preview area. Each key is drawn with its label, has a tooltip showing the current mapping target, and highlights with accent color when active (either pressed physically or triggered by a mapping).
-
Mouse graphic — Below the keyboard, a contoured mouse graphic shows:
- Left and right mouse buttons (LMB / RMB) shaped around the scroll wheel gap, highlighting with accent color when clicked.
- Scroll wheel pill in the center, clickable for middle-click mapping. Triangular scroll-up and scroll-down arrows on the wheel highlight when scroll output is active.
- Movement circle below the button area, with a dot that deflects to show the current mouse movement output. Hovering over the circle shows a directional arrow; clicking a quadrant maps MouseX, MouseXNeg, MouseY, or MouseYNeg.
- Side buttons (X1, X2) on the left edge of the mouse body for back/forward button mapping.
- Click-to-map — Click any key on the keyboard or any element on the mouse graphic to start recording a mapping for that output, just like clicking a button on the 3D controller model.
This preview gives you a visual representation of which keys and mouse buttons are currently mapped and active, making it easy to verify your Keyboard+Mouse configuration at a glance.

When a slot is set to the MIDI type, the Controller tab shows a piano keyboard and CC slider visualization. The 2D/3D toggle is hidden.
- CC sliders — Displayed at the top as vertical bar indicators (similar to triggers), one per CC output defined in the MIDI configuration. Each slider fills from bottom to top based on the CC value (0-127). The CC number is labeled below each slider. Click a slider to start recording a mapping for that CC output.
- Piano keyboard — A standard piano keyboard layout is drawn below the CC sliders. White and black keys are arranged in proper musical layout with note labels (e.g., "C4", "F#5") shown below white keys. Keys highlight with a pressed color when the corresponding note output is active. Black keys appear raised (higher Z-order) above white keys. Click any key to map a note output.
- Dynamic layout — The piano and CC sections rebuild automatically when you change the MIDI configuration (note count, start note, CC count, start CC). If no notes are configured, only the CC section is shown, and vice versa.
All MIDI preview elements support click-to-map and Map All flash animation (400ms orange flash, same as all other views).
- Button and Axis Mappings — Map inputs using the grid instead of click-to-map
- Controller Slots — Change the controller type shown in the visualization
- Stick Dead Zones — See a circular preview of stick dead zones