如何在更改一些JS变量后更新BabylonJS场景?

时间:2017-09-25 16:03:25

标签: babylonjs

我们可以在Babylon.JS中渲染场景,从表格字段中读取位置/比例等值。但是它是否允许在输入字段(如$('input').val()

)中更改场景监听实时更改
var cusotm_position = $('input').val();
canvas = document.getElementById("renderCanvas");
engine = new BABYLON.Engine(canvas, true);
scene = createScene(); //draws a mesh at custom_position 
engine.runRenderLoop(function () {
    scene.render();
});

$("input").change(function(){
    cusotm_position = $('input').val();
    scene.render();//doesn't seem to be updating the mesh to new value of custom_position
});

我试图在输入变化的事件监听器上调用scene.render();,但这似乎没有做任何事情。有什么像refrest / update更改为更新的变量值。如果可以在不删除所有内容并重新创建新场景的情况下完成,那就更好了。

2 个答案:

答案 0 :(得分:1)

调用BABYLON.AbstractMesh对象的.computeWorldMatrix()方法(以及任何Mesh)就像它所说的那样 - 重新计算对象的变换矩阵。

但实际问题似乎是你的代码没有做你认为它正在做的事情。这一点:

  

scene = createScene(); //在custom_position

处绘制网格

由于您稍后在同一场景对象上调用.render(),因此您的createScene()函数会返回您的主场景,而且它似乎是您为网格指定位置的唯一位置(顺便说一下,您会这样做)以及在你的问题中提供该功能的代码,因为在这一点上我不确定它实际上是否做了这些。因此,除非你每一帧都调用它(因为我没有在渲染循环中看到它,我会假设你没有),你永远不会将这个值分配给你的网格。 / p>

您需要做的是:

1)获取对网格的引用。可以这样做:var your_mesh = scene.getMeshById(" your_mesh_id");

2)获取您的职位BABYLON.Vector3:var custom_position = new BABYLON.Vector3(value_for_x,value_for_y,value_for_z);

3)为网格指定位置:your_mesh.position = custom_position;

此时,你不应该只需要在渲染循环中调用的scene.render()。

答案 1 :(得分:0)

您需要更新网格位置,让下一个render()自行刷新渲染。

因此,当您调用createScene()时,请保存要更新的网格对象,并在更改事件中进行必要的更改。