2017-09-25 83 views
0

我们可以渲染Babylon.JS中的一个场景,从表单字段读取位置/比例等值。但它是否允许在场景中进行更改,以监听输入字段中的实时更改,如$('input').val()如何更改一些JS变量后更新BabylonJS场景?

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 /更新更改为更新的变量值。更好的是,如果可以完成而不需要移除所有内容并重新创建新场景。

回答

0

BABYLON.AbstractMesh对象(以及任何Mesh)的调用.computeWorldMatrix()方法的功能与tin-forces对对象变换矩阵的重新计算所做的一样。

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

scene = createScene(); //在custom_position

绘制网格既然你稍后再打.render()是同一个场景的对象,你的createScene()函数返回的主场景,似乎在那里你分配到一个位置的唯一的地方你的网格(顺便说一句,你会很好地在你的问题中提供该函数的代码,因为在这一点上我不确定它实际上是否做到了这一点)。所以除非你每帧调用它(因为我没有在渲染循环中看到它,所以我会假设你没有),你永远不会把这个值分配给你的网格。

你需要做的是:

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); var custom_position = new BABYLON.Vector3(value_for_x,value_for_y,value_for_z);

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

在这一点上,你不应该需要比渲染循环中调用的scene.render()更多的东西。

0

您需要更新网格位置并让下一个render()自己刷新呈现。

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