three.js

THREE.Clock() - 주요 메소드

폴리프레임 2024. 9. 18. 08:00
반응형

THREE.Clock은 Three.js에서 시간 관리를 위한 유용한 도구로, 애니메이션과 프레임 간의 간격을 측정하는 데 주로 사용됩니다. Clock 객체를 이용하면 시간의 경과를 측정하거나 프레임별 델타 시간(delta time)을 계산하여 애니메이션 속도를 일정하게 유지할 수 있습니다.

 

getElapsedTime()

  • 경과된 전체 시간을 반환합니다. Clock이 생성된 이후 또는 마지막으로 clock.start()가 호출된 이후의 총 경과 시간을 초 단위로 반환합니다.
const elapsedTime = clock.getElapsedTime();

getDelta()

  • 두 프레임 간의 시간 차이(델타 시간)를 반환합니다. getDelta()는 보통 매 프레임마다 호출되어 애니메이션을 프레임 속도에 관계없이 부드럽게 실행하게 합니다.
const delta = clock.getDelta();

start()

  • Clock을 시작합니다. 시계를 다시 시작할 때 사용합니다
clock.start();

stop()

  • Clock을 멈춥니다. getElapsedTime()과 getDelta()는 시계를 멈춘 후에도 동일한 값을 반환합니다.
clock.stop();

running

  • Clock이 현재 작동 중인지 여부를 반환합니다. true면 작동 중, false면 멈춘 상태입니다.
const isRunning = clock.running;

 

활용예  

// Clock 생성
const clock = new THREE.Clock();

// 렌더링 루프에서 애니메이션 처리
function animate() {
  // 새로운 프레임을 요청 (requestAnimationFrame을 통한 반복적인 호출)
  requestAnimationFrame(animate);

  // 이전 프레임과의 시간 차이(델타 시간) 계산
  const delta = clock.getDelta();

  // 애니메이션에 delta 값을 반영하여 객체의 회전 속도를 일정하게 유지
  mesh.rotation.x += delta * 0.5; // 0.5 radian per second
  mesh.rotation.y += delta * 0.5;

  // 씬을 렌더링
  renderer.render(scene, camera);
}

// 애니메이션 시작
animate();
  • clock.getDelta()를 이용하여 각 프레임에서의 시간 차이를 계산하고, 이를 객체의 회전에 적용함으로써 프레임 속도에 관계없이 일정한 속도로 애니메이션이 실행되도록 합니다.
  • requestAnimationFrame(animate)를 통해 매 프레임마다 animate 함수가 호출되고, clock.getDelta()는 각 프레임에서 경과된 시간을 반환해 줍니다.
  • 이 방식은 프레임 속도가 변동되더라도 애니메이션이 일정한 속도로 실행되도록 보장합니다.