2026-03-15 22:03:30 -04:00
|
|
|
|
# VR Model Viewer
|
|
|
|
|
|
|
|
|
|
|
|
Interactive 3-D model viewer built with **OpenSceneGraph** and **Assimp**.
|
|
|
|
|
|
Designed for inspecting PMX (MikuMikuDance), FBX, OBJ and other model formats.
|
|
|
|
|
|
|
|
|
|
|
|
## Dependencies (already installed on Gentoo)
|
|
|
|
|
|
|
|
|
|
|
|
| Library | Gentoo package |
|
|
|
|
|
|
|---------|----------------|
|
|
|
|
|
|
| OpenSceneGraph ≥ 3.6 | `dev-games/openscenegraph` |
|
|
|
|
|
|
| Assimp ≥ 5.0 | `media-libs/assimp` |
|
|
|
|
|
|
| CMake ≥ 3.16 | `dev-build/cmake` |
|
|
|
|
|
|
| GCC / Clang (C++17) | `sys-devel/gcc` |
|
|
|
|
|
|
|
|
|
|
|
|
## Build
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# From the project root:
|
|
|
|
|
|
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
|
|
|
|
|
|
cmake --build build --parallel $(nproc)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Or inside VSCodium press **Ctrl+Shift+B** → *Configure + Build*.
|
|
|
|
|
|
|
|
|
|
|
|
## Run
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
./build/VRModelViewer path/to/model.pmx
|
|
|
|
|
|
# or
|
|
|
|
|
|
./build/VRModelViewer path/to/model.fbx
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Controls
|
|
|
|
|
|
|
|
|
|
|
|
| Input | Action |
|
|
|
|
|
|
|-------|--------|
|
|
|
|
|
|
| **LMB drag** | Orbit camera |
|
|
|
|
|
|
| **MMB drag** | Pan |
|
|
|
|
|
|
| **Scroll** | Zoom (dolly) |
|
|
|
|
|
|
| **R** | Reset camera to default humanoid view |
|
|
|
|
|
|
| **F / Space** | Frame whole scene |
|
|
|
|
|
|
| **S** | Toggle stats overlay (FPS, draw calls) |
|
|
|
|
|
|
| **Esc** | Quit |
|
|
|
|
|
|
|
|
|
|
|
|
## Project structure
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
vr_model_viewer/
|
|
|
|
|
|
├── CMakeLists.txt
|
|
|
|
|
|
├── include/
|
|
|
|
|
|
│ ├── Application.h # Top-level app / viewer owner
|
|
|
|
|
|
│ ├── ModelLoader.h # Assimp → OSG conversion
|
|
|
|
|
|
│ ├── SceneBuilder.h # Grid, axes, lights helpers
|
|
|
|
|
|
│ └── OrbitManipulator.h # Tweaked orbit camera
|
|
|
|
|
|
├── src/
|
|
|
|
|
|
│ ├── main.cpp
|
|
|
|
|
|
│ ├── Application.cpp
|
|
|
|
|
|
│ ├── ModelLoader.cpp
|
|
|
|
|
|
│ ├── SceneBuilder.cpp
|
|
|
|
|
|
│ └── OrbitManipulator.cpp
|
|
|
|
|
|
└── assets/
|
|
|
|
|
|
└── models/ # drop your .pmx / .fbx files here
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Roadmap
|
|
|
|
|
|
|
|
|
|
|
|
- [x] Phase 1 – Basic render pipeline + PMX/FBX loading
|
|
|
|
|
|
- [ ] Phase 2 – Model placement & transform gizmos
|
|
|
|
|
|
- [ ] Phase 3 – Bone / pose inspector
|
|
|
|
|
|
- [ ] Phase 4 – ImGui UI panel
|
|
|
|
|
|
- [ ] Phase 5 – VR headset integration (OpenXR)
|