2013-03-07 9 views
6

최소한 을 매우 간단하게 만들려고 노력하면part 1 of the Lighthouse3D Radar Frustum Culling tutorial이 작동하고 ... 내 렌더러에서 제대로 작동하지 않을 수도 있습니다.Frustum 컬링에 대한 "레이더 접근": 처음 간단한 테스트에서 실패합니까?

그래서 첫 번째 단계는 포인트가 근거리 평면의 전방에 있는지 또는 원거리 평면의 뒤쪽에 있는지 테스트하고, 그렇다면 조기 탈출입니다. (그렇지 않다면 추가 테스트를 수행해야하지만 처음 부분 만 붙어 있습니다.)

2x2 큐브의 월드 - 스페이스 센터 (x1y2z3)를 사용하고 이동할 수있는 카메라를 가지고 있습니다. 자유롭게 회전 할 수 있습니다. 렌더러가 정상적으로 작동하면 모든 벡터 및 행렬은 다소 견고해야합니다. 나는 심판의 Z 역 않는 이유

func (cam *Camera) frustumHasPoint(point *Vec3) bool { 
    var pc Vec3 
    v := point.Sub(&cam.Controller.Pos) // point minus camPos 
    ref := cam.Controller.dir // take a copy of camDir 
    ref.Z = -ref.Z 
    ref.Normalize() // camDir was already normalized but anyway... 
    pc.Z = v.Dot(&ref) 
    if pc.Z > cam.Perspective.ZFar || pc.Z < cam.Perspective.ZNear { 
     return false 
    } 
    return true 
} 

자 : 그래서 여기이 첫 번째 부분의 (이동)에 대한 필자의 테스트 간단한 "근처 또는-까지 대 Z는"입니까? 튜토리얼에서 그들은 다음과 같이 씁니다. "그림의 참조는 오른 손 시스템이 아닙니다 (OpenGL 에서처럼). Z의 방향이 바뀌어 튜토리얼을보다 직관적으로 만들 수 있기 때문에"- 글쎄, GL 튜토리얼에서 물론 이것과는 반대의 효과가 있습니다 ...

위와 같이 Z를 반대로하면, 시간의 약 50 % 이상이 흐려집니다. 그렇지 않으면, 시간의 98 % 가량 "over-culls"합니다.

무엇이 실종입니까?

+0

모든 _z_ 좌표가 똑같이 작동해야한다고 생각합니다. (예 : v.z도 미러링되어야합니다.) –

+0

'cam.Controller.dir'은 무엇입니까? - 시선 (카메라가 지향하는 벡터)입니까? 그렇다면 z를 무효화하고 싶지 않습니다. Z 부정을 제외하고 카메라와 포인트가 모두 세계 좌표 (즉, 모든 변형 (예 : 번역, 비율 등)가 적용된 상태)로 가정하면 나머지 수학은 합리적인 것처럼 보입니다. Z를 반대로하면 내적 및 원거리 값이 양수인 경우 거의 모든 점을 추려내는 것처럼 보이는 내적 상품이 부정적입니다. – radical7

답변

1

해결되었습니다. 왜냐하면 두뇌 오작동이었습니다 ... 튜토리얼은 절두체를 설명하기 위해 x/y/z 축을 먼저 얻는 것에 대해 명확하게 씁니다. 어쨌든 나는 그것을 놓쳤습니다.

+0

당신은 자신의 대답을 받아 들일 수 있습니다. – nemo