# qt/qt3d architecture

> Architecture diagram of the GitHub repository qt/qt3d, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qt/qt3d
- Repository: https://github.com/qt/qt3d

## Overview

Qt3D is a C++ and QML 3D application framework. Its principal workflow creates a scene from application-authored nodes or a QML component, gives that scene to the aspect engine, and runs domain aspects that support rendering and other scene behavior. The tree also identifies input, animation, geometry loading, and convenience APIs as product capabilities. The QML-to-engine handoff is explicit in sampled source; other backend links reflect the documented framework structure and available module paths, not inspected call sites.

Main entry points: [`src/core/nodes/qentity.cpp`](https://github.com/qt/qt3d/blob/dev/src/core/nodes/qentity.cpp) (Entity scene), [`src/core/aspects/qaspectengine.cpp`](https://github.com/qt/qt3d/blob/dev/src/core/aspects/qaspectengine.cpp) (Aspect engine), [`src/quick3d/quick3d/qqmlaspectengine.cpp`](https://github.com/qt/qt3d/blob/dev/src/quick3d/quick3d/qqmlaspectengine.cpp) (QML aspect engine), [`src/render/CMakeLists.txt`](https://github.com/qt/qt3d/blob/dev/src/render/CMakeLists.txt) (Render aspect)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Application API"]
  node_qml["QML aspect engine"]
  node_scene["Entity scene<br/>[qentity.cpp]"]
end

subgraph group_core["Scene Runtime"]
  node_engine["Aspect engine<br/>[qaspectengine.cpp]"]
  node_scene_state["Scene state<br/>[qscene.cpp]"]
  node_aspect_manager["Aspect manager<br/>[qaspectmanager.cpp]"]
  node_core_aspect["Core aspect<br/>[qcoreaspect.cpp]"]
  node_resource_manager[("Resource manager")]
end

subgraph group_capabilities["Scene Capabilities"]
  node_input["Input aspect<br/>[qinputaspect.cpp]"]
  node_animation["Animation aspect"]
  node_animation_control["Animation controller"]
  node_geometry["Geometry API<br/>[qgeometry.cpp]"]
  node_geometry_loaders["Geometry loaders"]
end

subgraph group_rendering["Rendering"]
  node_render_aspect["Render aspect<br/>[CMakeLists.txt]"]
  node_render_resources["Render resources<br/>[managers_p.h]"]
  node_rhi_bindings["Shader resources<br/>[pipelineuboset.cpp]"]
end

subgraph group_extras["Convenience APIs"]
  node_extras["Extras APIs"]
  node_camera_control["Camera controller"]
end

node_app(("Qt3D application"))
node_gpu(("Graphics device"))

node_app -->|"sets QML source"| node_qml
node_app -->|"creates nodes"| node_scene
node_qml -->|"instantiates"| node_scene
node_qml -->|"sets root entity"| node_engine
node_engine -->|"initializes scene"| node_scene_state
node_engine -->|"initializes aspects"| node_aspect_manager
node_engine -->|"registers root"| node_scene
node_scene -.->|"scene nodes"| node_core_aspect
node_scene -.->|"scene nodes"| node_input
node_scene -.->|"scene nodes"| node_animation
node_scene -.->|"scene nodes"| node_render_aspect
node_animation_control -->|"controls playback"| node_animation
node_geometry_loaders -->|"loads geometry"| node_geometry
node_render_aspect -.->|"uses resources"| node_render_resources
node_render_resources -->|"manages resources"| node_resource_manager
node_rhi_bindings -.->|"binds shader resources"| node_gpu
node_extras -.->|"provides renderer"| node_render_aspect
node_camera_control -->|"configures controls"| node_input
node_camera_control -->|"controls camera"| node_extras

click node_qml "https://github.com/qt/qt3d/blob/dev/src/quick3d/quick3d/qqmlaspectengine.cpp"
click node_scene "https://github.com/qt/qt3d/blob/dev/src/core/nodes/qentity.cpp"
click node_engine "https://github.com/qt/qt3d/blob/dev/src/core/aspects/qaspectengine.cpp"
click node_scene_state "https://github.com/qt/qt3d/blob/dev/src/core/qscene.cpp"
click node_aspect_manager "https://github.com/qt/qt3d/blob/dev/src/core/aspects/qaspectmanager.cpp"
click node_core_aspect "https://github.com/qt/qt3d/blob/dev/src/core/aspect/qcoreaspect.cpp"
click node_input "https://github.com/qt/qt3d/blob/dev/src/input/frontend/qinputaspect.cpp"
click node_animation "https://github.com/qt/qt3d/blob/dev/src/animation/frontend/qanimationaspect.cpp"
click node_animation_control "https://github.com/qt/qt3d/blob/dev/src/animation/frontend/qanimationcontroller.cpp"
click node_geometry "https://github.com/qt/qt3d/blob/dev/src/core/geometry/qgeometry.cpp"
click node_geometry_loaders "https://github.com/qt/qt3d/blob/dev/src/plugins/geometryloaders/default/basegeometryloader.cpp"
click node_render_aspect "https://github.com/qt/qt3d/blob/dev/src/render/CMakeLists.txt"
click node_render_resources "https://github.com/qt/qt3d/blob/dev/src/render/backend/managers_p.h"
click node_rhi_bindings "https://github.com/qt/qt3d/blob/dev/src/plugins/renderers/rhi/renderer/pipelineuboset.cpp"
click node_extras "https://github.com/qt/qt3d/blob/dev/src/extras/defaults/qforwardrenderer.cpp"
click node_camera_control "https://github.com/qt/qt3d/blob/dev/src/extras/defaults/qabstractcameracontroller.cpp"
click node_resource_manager "https://github.com/qt/qt3d/blob/dev/src/core/resources/qresourcemanager_p.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_qml,node_scene toneBlue
class node_engine,node_scene_state,node_aspect_manager,node_core_aspect,node_resource_manager toneAmber
class node_input,node_animation,node_animation_control,node_geometry,node_geometry_loaders toneMint
class node_render_aspect,node_render_resources,node_rhi_bindings toneRose
class node_extras,node_camera_control,node_app,node_gpu toneIndigo
```

## Components

### Application API

- [QML aspect engine](https://github.com/qt/qt3d/blob/dev/src/quick3d/quick3d/qqmlaspectengine.cpp): `src/quick3d/quick3d/qqmlaspectengine.cpp`
- [Entity scene](https://github.com/qt/qt3d/blob/dev/src/core/nodes/qentity.cpp): `src/core/nodes/qentity.cpp`

### Scene Runtime

- [Aspect engine](https://github.com/qt/qt3d/blob/dev/src/core/aspects/qaspectengine.cpp): `src/core/aspects/qaspectengine.cpp`
- [Scene state](https://github.com/qt/qt3d/blob/dev/src/core/qscene.cpp): `src/core/qscene.cpp`
- [Aspect manager](https://github.com/qt/qt3d/blob/dev/src/core/aspects/qaspectmanager.cpp): `src/core/aspects/qaspectmanager.cpp`
- [Core aspect](https://github.com/qt/qt3d/blob/dev/src/core/aspect/qcoreaspect.cpp): `src/core/aspect/qcoreaspect.cpp`
- [Resource manager](https://github.com/qt/qt3d/blob/dev/src/core/resources/qresourcemanager_p.h): `src/core/resources/qresourcemanager_p.h`

### Scene Capabilities

- [Input aspect](https://github.com/qt/qt3d/blob/dev/src/input/frontend/qinputaspect.cpp): `src/input/frontend/qinputaspect.cpp`
- [Animation aspect](https://github.com/qt/qt3d/blob/dev/src/animation/frontend/qanimationaspect.cpp): `src/animation/frontend/qanimationaspect.cpp`
- [Animation controller](https://github.com/qt/qt3d/blob/dev/src/animation/frontend/qanimationcontroller.cpp): `src/animation/frontend/qanimationcontroller.cpp`
- [Geometry API](https://github.com/qt/qt3d/blob/dev/src/core/geometry/qgeometry.cpp): `src/core/geometry/qgeometry.cpp`
- [Geometry loaders](https://github.com/qt/qt3d/blob/dev/src/plugins/geometryloaders/default/basegeometryloader.cpp): `src/plugins/geometryloaders/default/basegeometryloader.cpp`

### Rendering

- [Render aspect](https://github.com/qt/qt3d/blob/dev/src/render/CMakeLists.txt): `src/render/CMakeLists.txt`
- [Render resources](https://github.com/qt/qt3d/blob/dev/src/render/backend/managers_p.h): `src/render/backend/managers_p.h`
- [Shader resources](https://github.com/qt/qt3d/blob/dev/src/plugins/renderers/rhi/renderer/pipelineuboset.cpp): `src/plugins/renderers/rhi/renderer/pipelineuboset.cpp`

### Convenience APIs

- [Extras APIs](https://github.com/qt/qt3d/blob/dev/src/extras/defaults/qforwardrenderer.cpp): `src/extras/defaults/qforwardrenderer.cpp`
- [Camera controller](https://github.com/qt/qt3d/blob/dev/src/extras/defaults/qabstractcameracontroller.cpp): `src/extras/defaults/qabstractcameracontroller.cpp`

### Other components

- **Qt3D application**
- **Graphics device**

## Connections

- Qt3D application → QML aspect engine: sets QML source
- Qt3D application → Entity scene: creates nodes
- QML aspect engine → Entity scene: instantiates
- QML aspect engine → Aspect engine: sets root entity
- Aspect engine → Scene state: initializes scene
- Aspect engine → Aspect manager: initializes aspects
- Aspect engine → Entity scene: registers root
- Entity scene → Core aspect: scene nodes
- Entity scene → Input aspect: scene nodes
- Entity scene → Animation aspect: scene nodes
- Entity scene → Render aspect: scene nodes
- Animation controller → Animation aspect: controls playback
- Geometry loaders → Geometry API: loads geometry
- Render aspect → Render resources: uses resources
- Render resources → Resource manager: manages resources
- Shader resources → Graphics device: binds shader resources
- Extras APIs → Render aspect: provides renderer
- Camera controller → Input aspect: configures controls
- Camera controller → Extras APIs: controls camera
