[SOLVED] Load glb from url and set its position

Hi there, I was wondering is it possible to load model from external url into the world?

What I’m trying to achieve:

Created a ground element and attached a new script, the script should load model from url and set (+get) new model position relative to created ground

What are the steps? Been looking at examples but couldn’t find any similar ones

You will basically be doing this but with a URL instead of a binary asset in the project

https://developer.playcanvas.com/en/tutorials/loading-gltf-glbs/

Once the asset has been loaded from URL, you create an entity from the GLB container asset and position to wherever you like.

The helper script in the project has a function to load a GLB as a container asset from URL.

That would work indeed but in my case I want the model url not to be setten in editor but instead, written as a script.js

This would do it right?

The project has a helper script with a function that loads a GLB as a container asset from a URL that you can use to create an entity from at runtime. Look at glb-utils.js in the project.

I have an entity ‘Model’ and added a script
getting

Cannot read properties of undefined (reading ‘addChild’)

var Test = pc.createScript('test');

// initialize code called once per entity
Test.prototype.initialize = function() {
this.model = this.app.root.findByName('Model');
var app = this.app;

    var test = new pc.Entity();
app.assets.loadFromUrl('https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/2CylinderEngine/glTF-Binary/2CylinderEngine.glb', 'container', function(err, asset) {
    test.addComponent('model', {
        type: 'asset',
        asset: asset.resource.model,
    });
   this.model.addChild(test);
});

};

// update code called every frame
Test.prototype.update = function(dt) {

};

// swap method called for script hot-reloading
// inherit your script state here
// Test.prototype.swap = function(old) { };

// to learn more about script anatomy, please read:
// https://developer.playcanvas.com/en/user-manual/scripting/

Are you sure there is an entity with the name ‘Model’ in your scene?

    var app = this.app;
    var self = this;

    app.assets.loadFromUrlAndFilename('https://cdn.glitch.global/168e0451-dc78-4fa9-9a84-028ef51d9561/File.glb?v=1651912125168', null, "container", function (err, asset) {
        // Add the loaded scene to the hierarchy
        self.entity.addComponent('model', {
            asset: asset.resource.model
        });

               self.entity.addComponent('collision', {
        type: 'mesh',
         asset: asset.resource.model
    });
    
   self.entity.addComponent('rigidbody', {
        type: pc.BODYTYPE_KINEMATIC
    });
         
        if (asset.resource.animations.length > 0) {
            self.entity.addComponent('animation', {
                assets: asset.resource.animations    
            });
        }
    });
};

This works as expected if the entity is in root, let’s say I add entity as a child of a ground and then model does not appear, why would it happen?

Chances are that entity that you are adding this new entity to as a child is scaled/rotated in some way that it doesn’t look like it has appeared/rendered in the scene

Hi @yaustar I am a bit confused with the binary asset
As this project loads the models in two ways
one thru Asset and other thru Link

The binary asset of the Damaged Helmet is been added
I am trying to make/convert my model into a binary. But i am unable to do it
Please help me convert any model Glb into a Binary Asset and make it work with this project

And Second Doubt is


I have downloaded this Model

I am tring to load this instead of the Damaged Helment

AS in the first image: I can see all the materials and textures are been attached to the GLB model but default

BUt when i import my models they are not linked like this

SO two questions from my side

  1. How to convert a GLB into a Binary Asset
  2. How the GLB has all the materials and Textures linked properly, Not happening for me

Hoping for quickert response>
Thanks in Advance
Deepak