【问题标题】:How to update BabylonJS scene after changing some JS variables?更改一些 JS 变量后如何更新 BabylonJS 场景?
【发布时间】:2017-10-16 11:53:41
【问题描述】:

我们可以在 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 来更改更新的变量值。如果可以在不删除所有内容并重新创建新场景的情况下完成此操作,那就更好了。

【问题讨论】:

    标签: babylonjs


    【解决方案1】:

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

    但实际的问题似乎是您的代码没有按照您的想法执行。这一点:

    场景 = createScene(); //在custom_position绘制一个网格

    由于您稍后在同一个场景对象上调用 .render() ,因此您的 createScene() 函数返回您的 main scene ,它似乎是您为网格分配位置的唯一位置(顺便说一句,您会这样做很好地在您的问题中提供该函数的代码,因为在这一点上我不确定它是否真的可以做到这一点)。所以除非你在每一帧都调用它(因为我没有在渲染循环中看到它被调用,我会假设你没有),你永远不会将该值分配给你的网格。

    你需要做的是:

    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() 之外,您不需要任何其他东西。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多