[GPG 4 글 2.5] GPG4권에 공분산행렬을 이용한 OBB생성 부분에대해서...

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

비회원

GPG4권에 공분산행렬을 이용한 OBB생성 부분에대해서...

Post by 비회원 »

290장에 경계 입체의 구축에 대해서 궁금증이 있는데요?

for( int i = 0; i < nPoints; ++i )
{
Vector3 diff = nPoints-centroid;
for(int j=0; j<3; ++j)
{
float length = diff.Dot(basis);
if(length > max[j])
max[j] = length;
else if(length < min[j])
min[j] = length;
...

이런식으로 고유벡터의 투영길이를 구해주더군요,

그런데 왜 구지 max와 min을 구해주는 이유는 무었일까요?

다른곳에 쓰이는곳이 있을까요?

아니면 min,max평균을 구해서 길이로 그냥 이용하면 안될까요?
비회원

normalizing

Post by 비회원 »

노말라이징이네요.
BurnHead3D
Posts: 50
Joined: 2007-01-18 16:24

!

Post by BurnHead3D »

무게 중심이 상자의 정 가운데가 아닐수 있기 때문에,
상자의 방향벡터로 위아래의 길이를 같게(평균)
만들어줘야 합니다. 일반적인 obb충돌검출이 이와같으니...

Code: Select all

// 무게중심에서 상자중심으로 변환

	center += (0.5f*(min.x+max.x))*axis[0] +
		(0.5f*(min.y+max.y))*axis[1] +
		(0.5f*(min.z+max.z))*axis[2];

	extend.x = (max.x - min.x)*0.5f;
	extend.y = (max.y - min.y)*0.5f;
	extend.z = (max.z - min.z)*0.5f;
Engine Design 소스코드에 자세히 있습니다.
Post Reply