Terminator

importMesh and modify the model outside the callback

Recommended Posts

let's say I am using this code:
 

var board;

BABYLON.SceneLoader.ImportMesh("board","/models/","models.babylon",scene,function(newMeshes){
    board = newMeshes[0];   
});

board.position.x += 400;

board.position.x won't work since importMesh is using a callback function which is something I am aware off, but is there an alternative solution?

what I want is to import a mesh from a file, then save this mesh to a variable then clone this mesh but I don't want that to happen inside the callback function

for example:

var originalMesh = getMeshFromFile(filename_here);  
for (var i= 0; i< 100; ++i) {  
    var newClone = originalMesh.clone("index: " + index);
    newClone.position.y =+ i*2;
    newClone.material = ...
}

 

Share this post


Link to post
Share on other sites

Hi people,

Javascript is async (and thank god for that!). If you load an object, it will take some time until it is rendered in the scene. you will only be able to change its position after the callback was executed. 

changing the position before the object was loaded will not work (as you already noticed). you will have to work with callbacks, as this is how the language works :) . you can still have a global reference to the object, and when it is not null do something with it. but then again, what's wrong with doing it after the callback was executed?

Share this post


Link to post
Share on other sites

 

@RaananW For sure there's nothing wrong to wait for the callback is executed, the problem is just that I don't want to execute the code inside the callback function.

here is what I am thinking:

1- Import the mesh

2- get a reference about the imported mesh and clone it multiple times

3- manipulate the cloned meshes inside:

scene.registerBeforeRender(function(){

}); // registerBeforeRender()

 

so for me it is just about being able to use the imported mesh outside the callback function scope, (I think the solution is to just define a global variable for the mesh and just keep looping until it is no longer null as you mentioned?)

Share this post


Link to post
Share on other sites

once you start understanding the way callbacks are executed, you don't really need global variables. 

You could register the before render loop inside the callback.

For example - you could create an external function that will be called after the callback was executed: http://www.babylonjs-playground.com/#1BUQD5

You could also create a global variable and register the "beforeRender" after the callback was executed - http://www.babylonjs-playground.com/#1BUQD5#1 .

So many ways of achieving it without inspecting constantly if mesh is not null.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.