Sur cette page

Qt 3D: Exemple QML avec plusieurs fenêtres de visualisation

Exemple QML illustrant le rendu d'un graphe de scène à partir de plusieurs fenêtres de visualisation.

Illustration représentant un objet en 3D sous différents angles

Lafonctionnal ité« Multi Viewport » rend un graphe de scène depuis le point de vue de quatre caméras virtuelles dans les quatre quadrants d’une fenêtre. Il s’agit d’une configuration courante pour les outils de CAO 3D ou de modélisation ; elle peut également être adaptée pour faciliter le rendu d’un rétroviseur dans un jeu de course automobile ou de l’affichage d’une caméra de vidéosurveillance.

Pour plus d’informations, consultez la section « FrameGraph multi-fenêtres ».

Exécution de l'exemple

Vous pouvez exécuter l’exemple à partir de :

Création de plusieurs RenderViews

À l’aide des règles définies dans « Framegraph Rules », nous construisons cinq objets RenderView à partir du FrameGraph :

Viewport {
    id: mainViewport
    normalizedRect: Qt.rect(0, 0, 1, 1)

    ClearBuffers {
        buffers: ClearBuffers.ColorDepthBuffer
        clearColor: Qt.rgba(0.6, 0.6, 0.6, 1.0)
    }

    Viewport {
        id: topLeftViewport
        normalizedRect: Qt.rect(0, 0, 0.5, 0.5)
        CameraSelector { id: cameraSelectorTopLeftViewport }
    }

    Viewport {
        id: topRightViewport
        normalizedRect: Qt.rect(0.5, 0, 0.5, 0.5)
        CameraSelector { id: cameraSelectorTopRightViewport }
    }

    Viewport {
        id: bottomLeftViewport
        normalizedRect: Qt.rect(0, 0.5, 0.5, 0.5)
        CameraSelector { id: cameraSelectorBottomLeftViewport }
    }

    Viewport {
        id: bottomRightViewport
        normalizedRect: Qt.rect(0.5, 0.5, 0.5, 0.5)
        CameraSelector { id: cameraSelectorBottomRightViewport }
    }
}

L’ordre est important. Si le nœud ClearBuffers se trouvait en dernier lieu au lieu d’être le premier, cela se traduirait par un écran noir pour la simple raison que tout serait effacé juste après avoir été si soigneusement rendu. Pour une raison similaire, il ne pourrait pas être utilisé comme racine du FrameGraph, car cela entraînerait un appel visant à effacer l’intégralité de l’écran pour chacune de nos fenêtres d’affichage.

Bien que l’ordre de déclaration du FrameGraph soit important, « Qt 3D » est capable de traiter chaque RenderView en parallèle, car chaque RenderView est indépendante des autres pour ce qui est de générer un ensemble de RenderCommands à soumettre tant que l’état de la RenderView est actif.

Qt 3D utilise une approche du parallélisme basée sur les tâches, qui s’adapte naturellement au nombre de cœurs disponibles. Les RenderCommands des RenderViews peuvent être générées en parallèle sur plusieurs cœurs, et tant que l’on veille à soumettre les RenderViews dans le bon ordre sur le thread de soumission OpenGL dédié, la scène résultante sera correctement rendue.

Exemple de projet sur code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.