큰 방이 복셀 기반 3D 방에 밀봉되어 있는지 효율적으로 결정하는 데 문제가 있습니다. 나는 도움을 요청하지 않고 문제를 해결하기 위해 최선을 다했지만 포기하지 않을 정도로 도움을 요청하는 시점에 있습니다.
명확히하기 위해, 방에 구멍이 없다는 것을 밀봉하십시오. 실내가 밀폐되어 있는지 확인하고 산소 입력 레벨에 따라 밀봉하는 산소 실러가 있습니다.
지금, 이것이 내가하는 일입니다.
- 실러 타일 위의 블록에서 시작하여 (통풍구가 실러의 윗면에 있음) 6 개의 인접한 모든 방향으로 반복적으로 반복합니다.
- 인접한 타일이 진공이 아닌 전체 타일 인 경우 루프를 계속 진행하십시오.
- 인접한 타일이 가득 차지 않았거나 진공 타일 인 경우 인접한 블록이 재귀 적으로 있는지 확인하십시오.
- 타일을 확인할 때마다 카운터를 줄입니다.
- 카운트가 0에 도달하면 마지막 블록이 진공 타일에 인접 해 있으면 해당 영역이 봉인되지 않았 음을 반환합니다.
- 카운트가 0에 도달하고 마지막 블록이 진공 타일이 아니거나 카운터가 0이되기 전에 재귀 루프가 종료되면 (진공 타일이 남지 않음) 영역이 밀봉됩니다
영역이 봉인되지 않은 경우 몇 가지 변경 사항을 적용하여 루프를 다시 실행하십시오.
- 진공 타일 대신 "통기성 공기"타일이 있는지 인접 블록 점검
- 감소하는 카운터를 사용하는 대신 인접한 "호흡 가능한 공기"타일이 없을 때까지 계속하십시오.
- 루프가 완료되면 체크 된 각 블록을 진공 타일로 설정하십시오.
사용중인 코드는 다음과 같습니다. http://pastebin.com/NimyKncC
문제 :
3 초 마다이 검사를 실행하고 때로는 실러가 수백 개의 블록을 통과해야하며 많은 산소 실러가있는 큰 세계가 있습니다. 몇 초마다 여러 개의 재귀 루프가 CPU에서 매우 어려울 수 있습니다.
최적화에 대한 경험이 많은 사람이 나에게 도움을 줄 수 있는지 또는 적어도 올바른 방향으로 나를 가리킬 수 있는지 궁금합니다. 무리 감사.