튕기는 공
이제는 거의 일기장 수준의 글이 되어버렸습니다. 어떻게든 해내보겠습니다. 이번 강의에서 다룬 내용은 공과 바닥 사이에 탄성과 마찰을 적용하는 내용입니다.
물리는 Cannon.js에
앞에서 이야기했듯, 물리 시뮬레이션과 관련된 내용들은 Cannon.js에 넣어야 합니다. 그럼 이제 어떻게 넣을지에 대한 이야기만 남습니다.
1. 재료를 정의한다
그래픽을 많이 다루신 분들은 재료를 아실 것이리라 믿습니다. 제 경우엔 대부분 시각적으로 재료를 다루는 법을 배웠습니다. 하지만 여기서는 물리와 관련된 재료를 다루게 됩니다. CANNON에는 자체 재료가 있습니다.
그리고 이번 강의 내용에서는 공은 Plastic, 바닥은 Concrete라고 가정하고 진행을 하게 됩니다. 두 재료를 정의하는 방법은 new CANNON.Material('이름')입니다.
위와 같이 재료를 만들 수 있습니다. 이름은 구분용이지 크게 의미를 가지진 않는다고 합니다.
2. 각 객체에 재료를 입힌다
이제 각 객체에 대응되는 재료를 입히면 됩니다. 입힌다는 게 보통 랜더링할 때 쓰는 거라 여기서는 적용한다는 표현이 더 어울리기는 하겠네요. 공에는 Plastic, 바닥에는 Concrete를 적용합니다.
적용하는 방법은 최초에 생성할 때 넣거나, 이후에 적용해도 됩니다.
3. 두 재료 간 거동 정의하기
두 재료 간 어떻게 움직 일지를 정의합니다. 학교에서 배우는 물리와는 조금 차이가 있어 보입니다. 보통은 각 재료의 탄성계수를 정의했던 거 같은데 여기서는 좀 다르네요. Friction은 마찰을 뜻합니다. 바닥을 미끄러진다면 얼마나 부드럽게 움직 일지를 정의하는 부분입니다. restitution은 둘 사이의 탄성이라고 보시면 됩니다. 각 값은 아래와 같이 설정되었습니다.
그리고 해당 관계를 world에 넣습니다.
끝맺으며
각 재료별 관계를 일일이 지정하고, world에 넣는 방식으로 되어있는 것을 확인했습니다. 이를 토대로 추측 하면 Cannon을 통해 복잡한 물리적 행위들을 구현한다면 공수가 꽤나 들어가리라 예상합니다. 또는, 높은 수준의 코드를 통해 합리적인 코드를 만들 필요성도 있어 보입니다.