블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

 

Plane to Plane
-> 한평면의 테두리인 4개의 직선과 평면 충돌로 검출

// 평면1과 평면2의 선분 4개와 충돌 검사를 한다.
for( int I = 0; I < LineNum; i++){
{intersect3D_SegmentPlane( Segment S2[i], Plane Pn1, Point* I ) }

//평면 2와 평면1의 선분 4개와 충돌검사를 한다. LineNum = 4
for( int I = 0; I < LineNum; i++)
{intersect3D_SegmentPlane( Segment S1[i], Plane Pn2, Point* I ) }

BOOL CheckPlane()
{
for( int I = 0; I < LineNum; i++){
if( intersect3D_SegmentPlane( Segment S2[i], Plane Pn1, Point* I ) )
return TRUE;
}
for( int I = 0; I < LineNum; i++)
{
if( ntersect3D_SegmentPlane( Segment S1[i], Plane Pn2, Point* I ) )
return TRUE;
}
}

Sphere to Sphere
-> 구의 반지름 길이로 충돌검출

float D;
|Vr| = D = sqrt(Vr.x*Vr*x + Vr.y*Vr.y + Vr.z*Vr.z)
(벡터크기는 DX에서는 D3DXVEC3Length 란 함수로 제공한다. 그 외에 벡터들간의 연산에 관련된 여러 가지 함수들이 제공되어 편하다 )
if( (r+R) > D )
{
// sphere 충돌
}


float d = (Vr.x*Vr*x + Vr.y*Vr.y + Vr.z*Vr.z)
(r+R)² > d

Sphere to Line
-> 직선의 방정식과 구의 방정식을 이용해 충돌 검출

// return 값이 -1 이 아니라면 교차한다.
float ray_sphereIntersection(sphere_t* sphere, ray_t* ray) {
//B = [xd (x0 - xc) + yd(y0 - yc) + zd(z0 - zc)]이므로
// b - 직선의 방향벡터 d 와 직선의 한점 o 에서 구의 중심 p
// 으 로 향하는 벡터의 dot product
// C = (x0 - xc)² + (y0 - yc) ² + (z0 - zc)² - rs²
// 2가아니라 제곱입니다. 제곱은 카피가 안되니 조심하세요. //…
//vsquaredist = (o.x-p.x)²+(o.y-p.y)²+(o.z-p.z)²
float b = vdot(ray->d, vsub(ray->o, sphere->p));
float c = vsquaredist(ray->o, sphere->p) - (sphere->r * sphere->r);
// d = b²-c
float d = b * b - c;

if (d < 0.0f) {
return -1.0f;
}
return -b - sqrt(d); //t 값 return
}

BOOL WINAPI D3DXSphereBoundProbe(
const D3DXVECTOR3 *pCenter, // 구의 중심점
FLOAT Radius, // 구의 반지름
const D3DXVECTOR3 *pRayPosition, //직선의 위치
const D3DXVECTOR3 *pRayDirection //직선의 방향 벡터
);

출처 : http://cafe.naver.com/opendori/17451

반응형

'Programming > Math' 카테고리의 다른 글

투영 벡터 ( Projection Vector )  (0) 2012.05.16
동차좌표 ( 同次座標, Homogeneous coordinate )  (0) 2012.05.16
좌표계  (0) 2010.07.01
역행렬(Inverse Matrix)  (0) 2010.03.17
행렬식(Determinant)  (0) 2010.03.17
Posted by blueasa
, |