2010-03-04 2 views
3

제 XNA 게임에서 2D 공간의 여러 Vector2 좌표를 기준으로 불규칙한 모양을 정의해야했습니다. 그 이유는 충돌 확인 (예 : Rectangle.Intersects()) 때문이었습니다. 예를 들어일련의 Vector2 - XNA를 사용하여 모양 만들기

:

Vector2 point1 = new Vector(20,30); 
Vector2 point2 = new Vector(60,30); 
Vector2 point3 = new Vector(60,80); 
Vector2 point4 = new Vector(40,90); 
Vector2 point5 = new Vector(20,80); 

point1에서가는 경로가있는 형상을 만드는 것 - point1의 뒤쪽으로>point5 ->point2 ->point3 ->point4합니다.

그러나 이것을 구현하기위한 적절한 해결책을 찾지 못했습니다. 도와주세요. 감사.

답변

2

당신이하고 싶은 것에는 몇 가지 다른 접근 방식이 있습니다. 충돌 감지 : 점이 도형과 교차하는지 또는 두 개의 다각형이 교차하는지 판별하고 싶습니까?

원하는 것을 찾고 있다면 "다각형 테스트의 포인트"라고합니다. 여러 가지 접근 방법이 있지만 가장 빠르고 직선적 인 방법 중 하나는 광선 테스트입니다. 당신은 당신의 포인트로부터 광선을 생성하고 그것이 가장자리를 가로 지르는 횟수를 세웁니다. 번호가 짝수이면 포인트가 바깥입니다. 이상한 점은 안에 있습니다. 두 개의 다각형이 더 복잡 교차하는 경우

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) 
{ 
    int i, j, c = 0; 
    for (i = 0, j = nvert-1; i < nvert; j = i++) { 
    if (((verty[i]>testy) != (verty[j]>testy)) && 
    (testx < (vertx[j]-vertx[i]) * (testy-verty[i])/(verty[j]-verty[i]) + vertx[i])) 
     c = !c; 
    } 
    return c; 
} 

가 결정하지만, 전혀 비슷하지 : 기사에서 http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

코드 구현과 같이 보입니다 :

당신이 여기에 좋은 기사를 찾을 수 있습니다. 많은 게임이 포인트 인 폴리를 사용하여 폴리곤의 모서리를 쉽고 저렴하게 확인할 수 있지만 전체 교차점도 확인할 수 있습니다.

접근 방법 중 하나는 각 모서리를 분할 평면/반쪽 공간으로 처리하는 것입니다. 반 영역의 교차로는 두 개의 다각형이 교차하는지 여부를 판별합니다.

"축 별어 분리"를 검색해보십시오.

0

ZiggyWare (이전 www.ziggyware.com)는 2D 폴리곤 충돌 감지에 대한 자습서가 있지만 ZW가 새로운 집으로 이동하는 중입니다. Here's a video, 자습서의 모양과 비슷합니다.