반응형
Three.Clock
THREE.Clock은 Three.js에서 시간을 다루는 클래스로, 애니메이션을 부드럽게 만들 때 사용합니다.
주요 기능
- 경과 시간(deltaTime) 계산
→ 이전 프레임과 현재 프레임 사이의 시간 차이를 구할 수 있음 - 게임 루프에서 부드러운 애니메이션 구현
→ 프레임 속도(FPS)가 변해도 일관된 움직임 유지 가능 - 타이머 역할
→ 특정 이벤트를 일정 시간 후 실행할 때 사용 가능
기본 사용법
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@latest/build/three.module.js';
const clock = new THREE.Clock(); // 시계 생성
function animate() {
requestAnimationFrame(animate);
const delta = clock.getDelta(); // 이전 프레임 이후 경과 시간(초 단위)
console.log(`프레임 간 시간 차이: ${delta}초`);
// 여기에 애니메이션 로직 추가
}
animate();
clock.getDelta()는 이전 프레임과 현재 프레임 사이의 시간 차이를 반환합니다. 실행되는데 걸리는 시간 , 실행 간격 시간이라고 볼 수도 있습니다.
이를 이용하면, FPS가 변해도 애니메이션 속도가 일정하게 유지됩니다!
애니메이션 속도 조절하기
Three.Clock을 사용하면, 프레임 속도(FPS)에 따라 애니메이션이 빨라지거나 느려지는 문제를 해결할 수 있어요!
const clock = new THREE.Clock();
function animate() {
requestAnimationFrame(animate);
const delta = clock.getDelta(); // 지난 프레임 이후 경과 시간 (초)
cube.rotation.x += 1 * delta; // 시간에 비례하여 회전
cube.rotation.y += 2 * delta;
renderer.render(scene, camera);
}
animate();
FPS가 높아져도(예: 144Hz 모니터), 애니메이션이 일정한 속도로 움직입니다!
clock.getElapsedTime() – 경과 시간 측정
getElapsedTime()을 사용하면, 시계를 시작한 이후 총 경과 시간을 알 수 있어요.
const clock = new THREE.Clock();
setTimeout(() => {
console.log(`경과 시간: ${clock.getElapsedTime()}초`);
}, 3000);
3초 후, clock.getElapsedTime()을 호출하면 약 3.0초가 출력됩니다.
정리
메서드 | 설명 |
---|---|
clock.start() | 시계를 시작 (기본적으로 자동 시작됨) |
clock.stop() | 시계를 정지 |
clock.getDelta() | 이전 프레임과 현재 프레임 사이의 시간 차이 (초 단위) |
clock.getElapsedTime() | 시작 이후 총 경과 시간 (초 단위) |
clock.autoStart | true이면 clock.getDelta()를 호출할 때 자동 시작 |
언제 사용하면 좋을까?
✔ 부드러운 애니메이션 만들 때
✔ 프레임 속도(FPS) 변화에 영향을 받지 않는 움직임 구현
✔ 타이머 기능이 필요할 때
https://threejs.org/docs/index.html?q=clock#api/en/core/Clock
three.js docs
threejs.org
반응형
'프론트엔드 > Three.js' 카테고리의 다른 글
Raycaster (0) | 2025.02.01 |
---|---|
Cannon.js (0) | 2025.02.01 |
오일러(Euler) vs. 쿼터니언(Quaternion) (1) | 2025.02.01 |
THREE.Euler (0) | 2025.02.01 |
Three.js vs Unity (1) | 2025.01.05 |