2013-08-21 7 views
0

렌더링 영역에서 3D 게임의 다른 장면/영역으로 전환하는 가장 좋은 방법은 무엇입니까?게임 레벨 전환 방법

캐릭터가 있고 그가 새로운 지역으로 이사한다고 가정하면, 지역을 내리고 새로운 지역을로드하는 방법에 대해 어떻게 생각하십니까? 렌더링 함수를 다른 로딩 호출로로드하고 특정 매개 변수 내에있는 경우에만로드하거나 각 영역에 대해 열거자를 만들고 현재의 데이터를 언로드 한 후 switch 문과 같은 것을 사용하여 새 영역으로 전환할까요? 지역?

나는 취미로 만든 작은 게임에서 항상 나쁜 전환을 만들었고, 보통 때 또는 내 시점에서 내 성능을 죽입니다.

+0

좋은 리소스 관리자가 있다면 현재 영역을 언로드하지 않아도됩니다. 참조 카운트를 0으로 설정하고 향후 메모리를 확보해야하는 경우 RM이 사용하지 않는다는 것을 RM에 알리십시오. 그렇게하면 원래 수준으로 돌아 가면 디스크에서 다시로드하지 않아도됩니다. 그런 말로하면, http://gamedev.stackexchange.com/에 당신에게 더 나은 통찰력을 줄 수 있습니다. –

답변

1

enum 또는/및 switch/case을 사용하면 매우 유연하지 않습니다.

당신은 단순히 다음로드 레벨 i 대신은 ( 안돈 M. 콜맨에 의해 제안은 스마트 자원 관리자를 사용할 수) 이전 레벨/지역을 언로드 기능, 예를 load_area(i)를 사용할 수 있습니다.

리소스 처리를 게임 논리와 엔진에서 분리해야합니다. 예를 들어 렌더링 시스템은 열거 형을 반복하고 렌더링 할 장면을 선택하는 대신 현재로드 된 드로어 블 리소스를 표시해야합니다.

언로드 /로드 단계를 최소화해야합니다. 게임에 따라 게임의 현재 상태에 따라 리소스를 동적으로 업데이트하는 LOD (수준 세부 정보) 관리자를 사용하여 개별 전환을 완전히 피할 수 있습니다.

+0

예, 나는 당신이 거기에 무엇을 얻고 있는지 좀 이해합니다. 하지만 게임에 많은 부분이 있다면 성가신 일이 아니겠습니까? 당신은 여전히 ​​모든 영역을 어딘가에로드해야하기 때문에? 내가 얻는 것은 로딩을 외부 함수로 옮기는 것입니다. 조금 더 나은 의사 코드 나 작은 예제를 줄 수있는 방법이 있습니까? – SonarSoundProgramming

+0

아주 기본적인 구현을 위해 메모리의 모든 영역에있는 모든 항목의 목록을 유지하십시오 (예 : 모델/파일 이름 및 위치 목록). 물건 가까이 다가 가면 물건을 올려 놓고, 너무 멀리 떨어지면 물건을 내립니다. 로드는 다른 스레드에서 발생할 수 있으며 렌더러는로드를 완료 한 것만 가져옵니다 (그래도 렌더링 스레드가 데이터를 버퍼링하는 데 필요한 GL 호출을 모두 수행하는지 확인해야 함). 레벨이 증가함에 따라 모델 목록을 각 영역에 대한 그룹으로 분리하고 공간 데이터 구조에 위치 참조를 배치 할 수 있습니다. – jozxyqk

+0

@jozxyqk 해명 해 주셔서 감사합니다. 나는 그가 무엇을 의미하는지, 그리고 지금 당신이 의미하는 것을 봅니다. – SonarSoundProgramming