A cross-platform 3D model viewer built with Qt 6 and OpenGL 4.5 Core, powered by Assimp for broad format support.
Status: Under active construction. APIs, UI, and features are still evolving — expect breaking changes.
- Overview
- Features
- Screenshots
- Tech Stack
- Requirements
- Build Instructions
- Usage
- Project Structure
- Roadmap
- Test Models
- License
orView is a desktop 3D model viewer focused on clean, modern OpenGL rendering wrapped in a configurable Qt Widgets UI. It loads meshes through Assimp, normalizes them to unit coordinates, and renders them with a Blinn-Phong material pipeline. The viewport supports orbit/spin interaction, standard preset views, and perspective/orthographic projection switching.
The project is currently being modernized — the rendering path has been ported from OpenGL 3.3 Compatibility to OpenGL 4.5 Core, and the codebase was brought up to Qt 6.10.
- OpenGL 4.5 Core profile pipeline
- Blinn-Phong shading with per-mesh materials
- Diffuse texture support via Assimp material channels
- Normal visualization toggle (geometry shader)
- Opaque / transparent node separation during draw
- Model normalization to unit coordinates on import
- Orbit view and spin view modes
- Preset views — Top, Bottom, Left, Right, Front, Back
- Zoom Extents, Zoom Window, Reset
- Quaternion-based rotation for smooth, gimbal-lock-free orbiting
- Perspective and orthographic projections
- Dockable Events Log panel
- Case Setup panel with tabbed views
- Model Info — live Assimp node hierarchy tree
- Properties — mesh, material, and channel details
- Light and Dark themes
- Splash screen on startup
- Persistent XML-driven UI configuration
- Loads any format supported by Assimp (OBJ, FBX, glTF, STL, 3DS, DAE, PLY, and more)
- Drag-free
File → Openworkflow with relative/absolute path handling
| View | Preview |
|---|---|
| Main window with model & hierarchy | ![]() |
More screenshots are available under results/.
| Layer | Technology |
|---|---|
| Language | C++14 |
| UI framework | Qt 6.10 (Widgets, OpenGLWidgets) |
| Graphics API | OpenGL 4.5 Core |
| Math | GLM + QMatrix4x4 / QQuaternion |
| Model loading | Assimp 3+ |
| Build system | CMake 3.14+ (qmake .pro also provided) |
| Config I/O | Qt XML |
- Qt 6.10 or newer — modules:
Core,Gui,Widgets,OpenGL,OpenGLWidgets,Concurrent,Network,PrintSupport,Xml - Assimp 3.x or newer (system package on Linux, bundled under
External_Libs/Assimp3/on Windows) - CMake ≥ 3.14
- A GPU and driver supporting OpenGL 4.5 Core
- C++14 capable compiler (GCC 9+, Clang 10+, MSVC 2019+)
# Install Assimp system package
sudo apt install libassimp-dev
# Configure & build
cd orView
mkdir -p build && cd build
cmake ..
cmake --build . -j$(nproc)
# Run
./orViewThe CMake script expects Qt at $HOME/Qt/6.10.2/gcc_64. Adjust CMAKE_PREFIX_PATH in orView/CMakeLists.txt if your Qt install lives elsewhere.
- Install Qt 6.10+ with the MSVC kit.
- Place Assimp headers and
assimp.libunderExternal_Libs/Assimp3/. - Open
orView/CMakeLists.txtororView/orView.proin Qt Creator and build against the MSVC kit.
brew install assimp
cd orView && mkdir -p build && cd build
cmake -DCMAKE_PREFIX_PATH="$(brew --prefix qt)" ..
cmake --build . -j- Launch
orView. - Use File → Open to load a model (or drop one of the bundled test models from
test_models/). - Navigate the viewport:
- Left-drag — orbit
- Middle-drag — pan
- Wheel — zoom
- Switch views via the toolbar or View menu (Top, Front, Isometric, etc.).
- Toggle Perspective / Orthographic projection.
- Inspect the loaded scene through the Model Info tab (Assimp node tree) and the Properties tab.
- Switch between Dark and Light themes at any time.
orView/
├── orView/ # Application sources
│ ├── main.cpp # Entry point + splash
│ ├── mainwindow.* # Shell, menus, docks, themes
│ ├── mother_widget.* # Central widget host
│ ├── core_gl_widget.* # OpenGL 4.5 Core viewport
│ ├── camera.* # Orbit / spin / preset camera
│ ├── model.* # Assimp wrapper, node tree, materials
│ ├── themes_manager.* # Dark / Light theme application
│ ├── xml_manager.* # XML-driven config loading
│ ├── type_converter.* # glm <-> Qt matrix helpers
│ ├── model.vert / model.frag # PBR-ish Blinn-Phong shaders
│ ├── normals.{vert,geom,frag}# Normal visualization shaders
│ ├── Resources/ # Icons, splash, UI assets
│ ├── themes/ # Theme stylesheets
│ └── Config/ # Default XML config
├── test_models/ # Sample meshes for quick testing
└── results/ # Reference screenshots
Work-in-progress items and planned features:
- Port UI from Qt Widgets to Qt Quick / QML (keeping the OpenGL Core renderer)
- Ray-based mesh picking (Bullet-based picking under evaluation)
- Richer Model Info panel (per-mesh statistics, material preview)
- Multiple light sources and light configuration UI
- Scene graph manipulation (hide/show, isolate, transform gizmo)
- Screenshot and turntable animation export
- HDR environment maps / image-based lighting
- Cross-platform CI for Linux, Windows, macOS
The test_models/ directory ships with sample meshes for quick verification:
buddhacardemon_headdinoDragonsuzanneThor
These are convenient first loads after a fresh build to confirm the renderer is working.
License terms will be published alongside the first tagged release. Until then, treat this repository as source-available, all rights reserved — feel free to read, build, and experiment locally, but please open an issue before redistributing or using the code in another project.
