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

Babylonjs 更改一些JS变量后如何更新JS场景?,babylonjs,Babylonjs,我们可以在Babylon.JS中渲染场景,从表单字段读取位置/比例等值。但它是否允许在场景中进行更改,并实时更改输入字段,如$('input').val() 我试图调用scene.render()在事件侦听器上显示输入中的更改,但这似乎没有任何作用。是否有类似refrest/update的内容可以更改为更新的变量值。如果可以在不删除所有内容和重新创建新场景的情况下完成此操作,效果会更好。您需要更新网格位置,并让下一个render()自行刷新渲染 因此,当您调用CreateSecene()时,保存

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


我试图调用
scene.render()在事件侦听器上显示输入中的更改,但这似乎没有任何作用。是否有类似refrest/update的内容可以更改为更新的变量值。如果可以在不删除所有内容和重新创建新场景的情况下完成此操作,效果会更好。

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


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

调用BABYLON.AbstractMesh对象的.computeWorldMatrix()方法(以及任何网格)只需按tin上的说明执行操作-强制重新计算对象的变换矩阵

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

scene=createScene()//在自定义位置绘制网格

由于稍后将在同一个场景对象上调用.render(),因此createScene()函数将返回主场景,并且它似乎是为网格指定位置的唯一位置(顺便说一句,您最好在问题中提供该函数的代码,因为目前我不确定它是否真的执行任何操作)。因此,除非你每帧都调用它(因为我没有看到它在渲染循环中被调用,我假设你没有),否则你永远不会将该值指定给你的网格

您需要做的是:

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

2) 获取您作为巴比伦的位置。Vector3:var custom_position=new BABYLON.Vector3(value_代表x,value_代表y,value_代表z)

3) 为网格指定位置:您的网格位置=自定义网格位置

此时,您只需要在渲染循环中调用scene.render()即可

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
});