명시적 렌더링을 위해 requestRender()를 호출한다.
명시적으로 호출하지 않아도 자동 렌더링 되는 부분과 그렇지 않은 부분이 있다. 아래처럼 속성이 변경되는 경우는 자동 렌더링 되지 않는다.
이벤트가 트리거 될때마다 requestRender()를 호출 할 수 있지만 아래의 코드에서는 entity의 속성이 변경되지 않는 한 직접 호출할 필요가 없다.//scene을 업데이트하지 않으면 새 프레임을 렌더링하지 않는 뷰어를 만듦
var viewer = new Cesium.Viewer('cesiumContainer', {
requestRenderMode : true,
maximumRenderTimeChange : Infinity
});
//entity를 scene에 추가
var entity = viewer.entities.add({
position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
box : {
dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 30000.0),
material : Cesium.Color.CORNFLOWERBLUE
}
});
//마우스가 billboard 위에 있으면 크기와 색상을 변경하고, 그런 다음 새로운 렌더 프레임을 요청함
var lastPicked;
handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
//마우스 이동 이벤트를 걸어줌
handler.setInputAction(function(movement) {
//마우스 위치의 entity를 알아냄
//지형이 없는 경우
var pickedObject = scene.pick(movement.endPosition);
//알아낸 object가 정의된 것이고 추가한 box가 맞는지 확인
if (Cesium.defined(pickedObject) && (pickedObject.id === entity)) {
//직전에 속성을 변경한 box이면 처리를 중단
if (Cesium.defined(lastPicked)) {
return;
}
entity.box.material = Cesium.Color.YELLOW;
scene.requestRender(); //속성 변경후 수동으로 렌더링 함
lastPicked = pickedObject;
}
//이미 속성이 변경되었다면 원래대로 속성 변경
else if (Cesium.defined(lastPicked)) {
entity.box.material = Cesium.Color.CORNFLOWERBLUE;
scene.requestRender();
lastPicked = undefined;
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);