首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在3D世界中创建一个块?

如何在3D世界中创建一个块?
EN

Stack Overflow用户
提问于 2012-03-31 19:54:09
回答 1查看 1.4K关注 0票数 0

我在基于体素的游戏引擎上工作,其中我需要有块。我试着阅读“我的世界”中的一个分块类,但我无法理解它。我的意思是: 16x16x256块数组

所以我的问题是:块是如何工作的,它是如何存储数据的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-31 20:15:13

区块的

我的意思是: 16x16x256数据块数组

好吧,那就违背了一些几何结构。如果这是一个Micraft风格的游戏,那么一个块要么被填满,要么它是空的。您是否希望这些块是不同类型的,或者只是“那里”或“不在那里”。

为了简单起见,我们假设您希望为一个块设置2^CHAR_BIT不同的状态(在大多数系统上,CHAR_BIT是8)。状态0表示无效。因此您可以将这些块存储在结构的数组中

代码语言:javascript
运行
复制
char chunk[16][16][256];

您可以将其封装在一个类中。

代码语言:javascript
运行
复制
class Chunk
{
private:
    char chunk[16][16][256];
}

当然,您的世界由多个块组成,您可能会将这些块排列在一个网格中,其中每个网格单元占用一个块

代码语言:javascript
运行
复制
class ChunkGrid
{
private:
    std::list<Chunk> chunks;

当然,您还希望以空间细分结构组织这些块,这样您就可以根据它们在世界上的位置快速索引块,八叉树可以很好地实现这一点

代码语言:javascript
运行
复制
    class ChunkOctree
    {
    private:
        union Fork
        {
            ChunkOctree *branch;
            Chunk *leaf;
        };
        Fork forking[2][2][2];
    }

您还需要一些函数来遍历此结构,但我将把研究留给您,作为一个学习实验。我已经给了你足够的关键字来搜索互联网。

代码语言:javascript
运行
复制
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9955626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档