'Collision'에 해당되는 글 1건

  1. 2009.12.19 Collision Detection

  1. 면과 점의 충돌 감지 (법선벡터를 이용한)

    면과 점의 충돌 감지는 법선벡터와 평면의 방정식을 이용하면 쉽게 해결할 수 있다.
    1) 면의 Normal Vector를 구한다.
      Normal Vector는 3점을 알거나, 2개의 벡터를 알면 구할 수 있다.
      - 3점을 알 경우 (P=Point, V=Vector, N=NormalVector)

    V1 = P1 - P2; //외적을 구하는데 필요한 세 정점으로 두 벡터를 만들고
    V2 = P2 - P3;
    N.x = V1.y*V2.z - V1.z*V2.y; //두 벡터의 외적을 구해서 Normal Vector를 만듬
    N.y = V1.z*V2.x - V1.x*V2.z;
    N.z = V1.x*V2.y - V1.y*V2.x;

    2) 평면의 방정식을 구한다.
       평면의 방정식은 Normal Vector와 평면상의 한 점을 통해 구할 수 있다.
       평면의 방정식은 Ax + By + Cz + D = 0  이다.
       A, B, C는 Normal Vector의 x, y, z 값이고
       x, y, z는 평면앙의 한 점의 x, y, z 값이다.
       D는 -(Ax+By+Cz) 이다.
       즉, Normal Vector를 N, 평면상의 한 점을 P라고 하면
       Ax + By + Cz + D = 0   ==>  N.x*P.x + N.y*P.y + N.z*P.z + D = 0 
                                              D = -(N.x*P.x + N.y*P.y + N.z*P.z)

     3) 이제 충돌감지의 대상이 되는 점 TargetPoint(T)과 위에서 구한 Normal Vector, D, 평면의 방정식을 이용해
        충돌감지를 할 수 있다.
       Normal Vector와 Target Point, 위에서 구한 D 값을 평면의 방정식에 대입하면
       N.x*T.x + N.y*T.y + N.z*T.z + D = 0  이 된다.
       N.x*T.x + N.y*T.y + N.z*T.z + D <= 0 인 경우 충돌 (혹은 면의 안쪽) 이라 판단하며
       N.x*T.x + N.y*T.y + N.z*T.z + D > 0 인 경우는 비충돌 (혹은 면의 바깥쪽) 이라 판단한다.

  2. 1번 방법을 큐브의 6면에 적용하면 박스와의 충돌감지



[원본] http://niceyth.springnote.com/pages/1947148

Posted by 시그v
이전버튼 1 이전버튼

블로그 이미지
Computer graphics & Programming
시그v

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 받은 트랙백

최근에 달린 댓글

믹시