-
[Three.js] 애니메이션개발공부/Web 2023. 3. 18. 01:16
오늘 배운 것들
- 애니메이션 기본(requestAnimationFrame, setAnimationLoop)
- 성능 보정(clock을 이용한 디바이스 별 성능 격차 보정, JavaScript Date.now를 사용한 성능 격차 보정)
- 안개
애니메이션 기본
window.requestAnimationFrame(draw);renderer.setAnimationLoop(draw); //작동이 똑같음 but AI, VR 컨텐츠 할때는 이거를 사용해야 한다.requestAnimationFrame과 setAnimationLoop 모두 리페인트를 한다. (프레임을 새로 그린다...?)
재귀함수식으로 draw 함수를 만들고 그 안에 저 코드를 넣으면 프레임이 계속 갱신되면서 자연스러운 애니메이션을 만들 수 있게 된다.
mesh.rotation.y += 0.01; //radianmesh.rotation.y += THREE.MathUtils.degToRad(1); //deg to rad이렇게 빨간 박스의 속성을 설정하게 되면
이 빨간 박스가 막 돌아가는 걸 볼 수 있다.
애니메이션 성능 보정
그러나 이 돌아가는 속도가 컴퓨터마다 다를 수 있다.
const clock = new THREE.Clock();//draw 함수 안에서const time = clock.getElapsedTime();time을 콘솔에 찍어보면 draw 함수에서 프레임이 갱신될 때마다 시간 정보가 찍히는 것을 볼 수 있는데 이 시간의 격차가 컴퓨터마다 다르다. 성능이 좋은 컴퓨터는 1초에 한 번 씩 찍힌다고 가정할 때 좋지 않은 컴퓨터는 5초에 한 번씩 찍힐 수도 있는 것이다.
따라서 위에서처럼 직접 설정하는 대신
mesh.rotation.y = time; //어떤 성능의 컴퓨터에서도 같은 속도로 움직일 수 있게이런식으로 설정을 해 주면 모든 디바이스에서 일정한 속도가 유지될 수 있다.
const delta = clock.getDelta(); //실행되는 간격시간elapsed time은 절대시간을 나타내고 getDelta는 간격을 출력하는데 둘 다 사용할 수 있다. 다만 delta를 쓸 때는 rotation.y에 += 를 해줘야 한다.
안개
scene.fog = new THREE.Fog('blue', 3, 4); //색상, near, farscene에 fog 속성을 추가하면 아래와 같은 안개 효과를 줄 수 있다. 원근을 나타낼 때 유용하다고 한다. 색상 지정, 범위 지정(near, far)이 가능하다.
'개발공부 > Web' 카테고리의 다른 글
[Three.js] Transform (0) 2023.03.29 [Three.js] 개발 보조 도구 (0) 2023.03.20 [Three.js] 기본 요소 익히기 (0) 2023.03.06 [Three.js] 환경설정/기본 소스 코드 실행 (0) 2023.02.27 [React] google oauth2 연동 (0) 2023.02.27