2012-03-31 2 views
0

나는 청크가 있어야하는 voxel 기반 게임 엔진에서 작업하고 있습니다. 나는 미니 크래프트에서 Chunk 클래스를 읽으려고했지만, 이해할 수 없다. 청크 란 말은 : 16x16x256 블록 배열3D 세계에서 청크를 만드는 방법은 무엇입니까?

제 질문은 : 어떻게 청크가 작동하고 데이터를 어떻게 저장합니까? 청크

+0

여기서 모두가 Minecraft 코드베이스를 읽은 것은 아니지만, 청크는 메모리 버퍼에서 기하학적 구조에 이르기까지 전혀 다를 수 있습니다. 당신이 말하는 덩어리는 무엇입니까? 너는 무엇을하려하고 있느냐. 지금까지 무엇을 시도 했습니까? 귀하의 휴리스틱 코드를 ​​보여줄 수 있습니까? – datenwolf

+0

나는 일하지 않는 코드가 없기 때문에 내가 어떻게해야하는지 이해하지 못한다. – TheMorfeus

+0

@datenwolf 청크는 일반적으로 보셀 그래픽과 관련이 있습니다. 단지 미니 크래프트 특정이 아닙니다. –

답변

1

난 의미 : 블록

다음 약간의 기하학적 구조를 무시

음의 16x16x256 어레이. 이것이 Micraft-esque 게임 인 경우 블록이 채워지거나 무효입니다. 그 블록들이 다른 유형이거나, 단지 "거기"또는 "존재하지 않기"를 원하십니까?

단순화를 위해 블록에 대해 2^CHAR_BIT 개의 상태를 갖기를 원합니다 (대부분의 시스템에서 CHAR_BIT는 8입니다). 상태 0은 void를 의미합니다. 따라서 블록을 구조의 배열에 저장할 수 있습니다.

char chunk[16][16][256]; 

클래스로 캡슐화 할 수 있습니다. 당신의 세계를 하나 개 이상의 덩어리로 구성 물론

class Chunk 
{ 
private: 
    char chunk[16][16][256]; 
} 

, 당신은 아마 각 격자 셀은 하나 개의 덩어리를

class ChunkGrid 
{ 
private: 
    std::list<Chunk> chunks; 

을 차지 그리드,에 덩어리를 준비합니다 그리고 확실히 당신은 또한 원하는 빠르게 인덱스 덩어리는 세계에서 자신의 위치에 따라 할 수 있도록 공간 구획 구조에서 그 덩어리를 구성하는 옥트리는

class ChunkOctree 
    { 
    private: 
     union Fork 
     { 
      ChunkOctree *branch; 
      Chunk *leaf; 
     }; 
     Fork forking[2][2][2]; 
    } 

는거야 루게릭 병에 대한 훌륭하게 작동 o 일부 기능이이 구조를 통과하기를 원하지만, 나는 학습 실험으로서 당신에게 연구를 맡길 것이다. 나는 당신에게 interwebs를 검색 할 수있는 많은 키워드를주었습니다.

} 
+0

위대한,하지만 심지어 자바? – TheMorfeus

+0

이미 그 어딘가에 대한 C++ 자습서가 있습니다. 왜 내가 자바 태그 아래에 질문을했다. – TheMorfeus

+1

@ TheMorfeus :이 의사 코드를 고려하십시오. 개념적으로 C++, Java 또는 D 사이에는 차이가 없습니다. 학습자로서 사용하는 언어를 넘어 귀하는 기본 개념과 데이터 구조를 이해하고 있다는 점이 중요합니다. – datenwolf

관련 문제