재미 있기 때문에 작은 복셀 엔진을 만들려고 노력하고 있지만 실제 복셀을 저장하는 가장 좋은 방법을 찾기 위해 고심하고 있습니다. 나는 어떤 종류의 덩어리가 필요하다는 것을 알고 있으므로 전 세계를 메모리에 담을 필요가 없으며 합리적인 성능으로 렌더링해야한다는 것을 알고 있습니다.
나는 octrees에 대해 읽었고 그것이 이해하는 것부터 1 큐브로 시작하고 그 큐브에서 8 큐브가 더 될 수 있으며 8 큐브 모두 다른 8 큐브가 될 수 있습니다. 그러나 이것이 내 voxel 엔진에 적합하지 않다고 생각합니다. 복셀 큐브 / 아이템은 모두 같은 크기입니다.
따라서 다른 옵션은 16 * 16 * 16 크기의 배열을 만들고 하나의 청크를 만들고 항목으로 채우는 것입니다. 품목이없는 부품의 값은 0입니다 (0 = 공기). 그러나 이것이 많은 메모리를 낭비하고 빠르지는 않을까 걱정됩니다.
그런 다음 다른 옵션은 각 청크에 대한 벡터이며 큐브로 채 웁니다. 그리고 큐브는 청크에서 그 위치를 유지합니다. 이렇게하면 메모리가 절약되지만 (공기 블록 없음) 특정 위치에서 큐브를 찾는 속도가 훨씬 느려집니다.
그래서 나는 정말로 좋은 해결책을 찾을 수 없으며 누군가 나를 도울 수 있기를 바랍니다. 그래서 무엇을 사용하고 왜?
그러나 또 다른 문제는 렌더링입니다. OpenGL을 사용하여 각 청크를 읽고 GPU로 보내는 것은 쉽지만 매우 느립니다. 청크 당 하나의 메쉬를 생성하는 것이 더 좋지만, 한 블록을 깰 때마다 약간의 눈에 띄는 딸꾹질을 일으키는 데 약간의 시간이 걸릴 수있는 전체 청크를 다시 빌드해야한다는 것을 의미합니다. 그래서 더 힘들 것입니다. 그러면 큐브를 어떻게 렌더링합니까? 청크 당 하나의 정점 버퍼에 모든 큐브를 만들고 렌더링하여 다른 스레드에 넣거나 다른 방법이 있습니까?
감사!