Qt World Summit: Submit your Presentation

Qt3d Sceneloader: Replace the material component of an Entity with my custom material at runtime

  • i have the following code to load a collada scene using the SceneLoader:

        id: sceneLoader
        source: "file:///home/rui/projects/cad/bodyplacement_lm36_v2.dae"
        MetalRoughMaterial {
            objectName: "MetalRoughMaterial"
            metalness: 0
            roughness: 0.9
        onStatusChanged: {
            console.log("SceneLoader status: " + status);
            if (status == SceneLoader.Ready) {
                console.log("Scene is ready");
                var entitynames=sceneLoader.entityNames();
                for (var i = 0; i < entitynames.length; ++i) {
                    var entityname=entitynames[i];
                    var entityvar=sceneLoader.entity(entityname);
                    for (var j = 0; j< entityvar.components.length; ++j) {
                        var cmp=entityvar.components[j]
                            var cmp_class=cmp.toString();

    as stated in docs (https://doc.qt.io/qt-5/qt3drender-qsceneloader.html#details):

    The loader will try to determine the best material to be used based on the properties of the model file. If you wish to use a custom material, you will have to traverse the tree and replace the default associated materials with yours.

    after i iterate all the entities i try to replace the material component wit the code:


    but isn't working. After debugging i can see that the loaded material isn't replaced.

    How can i replace the material component with my custom material at runtime?

Log in to reply