2017-09-25 12 views
0

우리는 바빌론에서 장면을 렌더링 할 수 있습니다 .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/update와 같은 것이 있습니까? 모든 것을 제거하고 신선한 장면을 재현하지 않고도이 작업을 수행 할 수 있다면 더 좋습니다.

답변

0

BABYLON.AbstractMesh 개체 (및 모든 Mesh)의 .computeWorldMatrix() 메서드를 호출하면 개체의 변형 행렬을 주석으로 다시 계산하는 작업 만 수행됩니다.

하지만 실제 문제는 코드가 생각하고있는 것을 수행하지 않는 것으로 보입니다. 이 지점 :

장면 = createScene(); 나중에 같은 장면 객체() .render 호출되기 때문에 //이 custom_position

에 메쉬를 그립니다, 당신의 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);

3) 메시에 위치 지정 : your_mesh.position = custom_position;

이 시점에서 렌더 루프에서 호출 된 scene.render() 이외의 것이 필요하지 않습니다.

0

메시 위치를 업데이트하고 다음 render() 렌더링 자체를 새로 고침해야합니다.

그래서 createScene()을 호출하면 업데이트하려는 메쉬 객체를 저장하고 변경 이벤트에서 필요한 변경을 수행하십시오.