1. Coarse Collision Detection

웹/JS 물리엔진 | 2012. 7. 30. 17:12
Posted by 클라리넷

1. Bounding Volume

어떤 물체가 있으면, 그 물체를 완전히 포함하는

단위 부피로 감싼다(보통 구 또는 큐브를 사용한다고 한다).


그리고 주어진 알고리즘에 따라서

인근해 있는 두 개 이상의 부피를 완전히 포함하는

또다른 단위 부피로 감싼다.

(부피 안에 있는 물체를 포함하는 게 아니라

그 물체를 포함하는 부피 그 자체를 완전히 포함하는 것이다)


하위 두 개의 부피를 자식으로 하고,

두 부피를 감싸는 큰 부피를 부모로 하는

트리를 만든다.


이런 식으로 계속 부피들을 더 큰 부피로 감싸다 보면

최종적으로 한 개의 부피가 만들어질 것이고,

그 부피는 트리의 root일 것이다.

(알고리즘에 따라 다르다.  꼭 최종 한 개가 아닐수도 있다)


이 때, 실제 물체를 가지고 있는 부피는

잎사귀 노드들 밖에 없다.

(이 역시 알고리즘에 따라 다르지만,

트리 구성에 따른 유용한 공식들을 사용하려면 이 방법이 유리하다)


Fine collision detection을 수행할 때는, 트리의 꼭대기에서부터

아래로 내려온다.

자식 노드들 간에

단위 부피 형태에 따른 충돌 체크를 한다.

(단위 부피를 구나 큐브로 하는 이유가 여기에 있다.

최대한 트리 내에서의 충돌처리 비용을 줄이기 위해서)

만약 충돌을 하지 않는다면

그 노드들의 자식들 역시 절대로 충돌할 일이 없다는 뜻이 된다.

즉, 그 노드들의 자식들끼리는 절대 충돌체크를 할 일이 없다.


반대로 충돌을 한다면,

그 자식들 역시 충돌할 가능성이 있다는 뜻이다.

따라서, 충돌한 노드이 있으면

그 자식들끼리도 충돌체크를 한다.

마찬가지로, 충돌을 하지 않으면 앞으로 볼 일 없는 거고,

충돌을 하면 그 자식들끼리 또 체크를 한다(으아아아아아).



-Coarse Collision Detection 끝- 

' > JS 물리엔진' 카테고리의 다른 글

물리 엔진 현황  (0) 2012.05.15
 

Array와 Object, Enhanced for문과 그냥 for문

웹/Javascript | 2012. 7. 2. 12:08
Posted by 클라리넷

Array, Object가 하나씩 있고,

각각에 대해 원소들을 순서대로 접근하고 싶다면,


Array는 그냥 for문에다가 조건을 Array.length로 잡고,

 Object는 Enhanced for문을 쓰면 된다.


Array에서 Enhanced for문을 쓰면 Array 클래스에 내재된 함수까지 모조리 Enhanced에 걸린다.  그래서 결과가 이상하게 나오게 된다(isArray, copy, size 등등.  push, pop 같은 건 Array 객체에만 있는 거라서 나오지 않는다).


반대로, Object에서 Object.length를 쓰게 되면 length가 undefined로 나온다.  당연한 것이, Object는 배열이 아니기 때문에 원소의 개수를 셀 수 없다.  해쉬된 원소들을 셀 수 없냐고 하면 글쎄....  셀 수는 있을 거 같지만 위에서처럼 멤버 함수까지 모조리 세어지기 때문에 안 하지 않았을까 싶다.

' > Javascript' 카테고리의 다른 글

실수하면 디버깅이 안 되는 자바스크립트 실수  (0) 2011.12.18
 

물리 엔진 현황

웹/JS 물리엔진 | 2012. 5. 15. 13:38
Posted by 클라리넷

일단 이 물리엔진을 만들기 시작한 이유는

웜즈를 만들기 위해서이죠.

그래서 기본적인 물리엔진 기능 + 픽셀 충돌 처리가 가능한

물리 엔진을 목표로 하고 있습니다.


하지만 일단은 웜즈를 구현할 수 있는 정도로 만족하기로 했습니다.

회전이 너무 어려워서....  허허.

그래서 일단은 사각형 + 픽셀 + 원에 대한 것만 처리하고

무회전으로 구현하기로 했습니다.

' > JS 물리엔진' 카테고리의 다른 글

1. Coarse Collision Detection  (0) 2012.07.30
 

블로그 이미지

클라리넷

카테고리

Vie (12)
(6)
C++ (2)
게임 개발 (1)
게임하기 (0)
엔진 (0)
전자기기 (3)
Deep Learning (0)