2017-09-25 86 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()時,請保存要更新的網格對象,並在更改事件中進行必要的更改。