2010-02-22 3 views
7

레이 세이 구 교차 테스트를 수행하기위한 적절한 가속 구조를 찾고 있습니다 (게임에서). 다음과 같은 조건이 적용이동하는 구가있는 레이 스피어 테스트의 좋은 가속 구조

프레임 당 서로에 대해 테스트하는 100 구 100 광선 arround를 저기있다

년 - 구가 각 프레임으로 이동, 그래서 광선이

저기가 광선 할 수있다 할/구가

전체적인 것은 3D

KD는 트리 레이 교차로에 대한 아주 좋은입니다 (다만 약간 이동하지만, 그들 중 대부분은 두 프레임 사이에 동일합니다) 각 프레임에 추가/제거 테스트지만, 이후 구체 이동, 모든 프레임에서 KD 트리를 재 구축해야하는데, 이는 값 비싸다.

Oct-tree는 유지하기가 더 쉽지만 광선 교차 테스트에는 효과가 없다.

100 구에 대한

100 선이 많이 될 것 같지 않습니다 ,하지만 난 매우 낮은 자원에 대한 코딩, 그래서 나는 나에게이에 대한 몇 가지 힌트를 줄 수

사람에 대한 몇 가지 가속을 찾고 있어요?

+0

+1 내 컴퓨터 앞에서 일부러 죽을 운명이 아니라는 것을 알려주는 +1. –

+2

2009 년 이후 내 머리가 터지게하는 ++++ ing 질문 – Will

+0

은 내 질문에 대한 잘못된 내용을 이해하지 못합니다. – Mat

답변

1

100x100 = 10k, 최적화 된 무차별 대항력은 비 간섭 성으로 보이지 않습니다. 특히 광선/구 교차 테스트는 단지 덧셈/곱하기 만 포함합니다. 메인 루프 전에 항상 정규화 된 모든 광선 벡터를 사전 계산할 수 있습니다.

경계가있는 우주에 살고 있고 구 및 광선의 공간 밀도가 비교적 일정하다고 가정하면 고정 된 공간 격자 (고정 된 oct-tree)를 사용할 수 있습니다. 즉, 16x16x16 셀 격자와 같은 것입니다. 선율, 그리고 나 :

각 영역 교차 세포
  • 미리 계산 각 셀에, 교차 구체의 목록, 각 레이
  • 에서 저장을 (계산하기 쉽고, 단지 몇 가지 추가하고 비교 포함) 루프 :
    • ra의 셀 목록을 계산하십시오. y가 교차합니다 (Bresenham의 알고리즘에 기반한 방법이 트릭을 수행 할 수 있습니다)
    • 이 셀 목록의 모든 영역에 대해 교차 테스트를 수행합니다.

어떤 나무 만 구에있는 어떤 선을 저장하지 않아도 그런 식으로. 이 방법의 효율성은 비율 셀 크기/구 크기에 따라 달라지며 구면 크기에 너무 많은 분산이 없으면 좋은 힌트가 될 수 있습니다. 구가 최소가 서로 영역 크기를 교차하지 않는 경우

, 당신도 (... 적절한 수의 독자에 exercice로 남아있는) 셀 목록에서 구 목록을 결합 할 수

HTH

+0

@Mat, 문제 해결에 도움이 되나요? 그렇다면 "응답 함"으로 플래그를 지정할 수 있습니다. –