我应该在我的3D基于块的游戏中融合面孔吗?

好吧,我在3D世界里有一堆立方体。 我已经实现了面部剔除,所以当一个立方体与另一个立方体相邻时,他们的脸部将不会被绘制,甚至不会被发送到缓冲区。 然而,当我还在研究如何制作一个基于3D块的游戏的时候,我遇到了一个堆栈溢出的问题,在那里提问者张贴了他们的立方体的图像,这些立方体不但被扑灭,而且还合并了面部相邻的立方体变成更大的矩形面。 喜欢这个: 结合面孔

我的问题是,我应该这样做吗? 绘图时间是否足够保存以certificate更长的更新时间? 如果是这样,我甚至不确定它是否会在某些时候有效。 立方体没有纹理,它们是有色的,所以我不完全确定它是否可以用多种颜色的立方体工作。

有很多不同的变数在这方面发挥作用。 如果两个面相邻,使用不同的纹理,亮度,颜色等等,你很可能无法将它们连接在一起(几乎任何可能的工作都是可行的,但可能是FAR太多工作)。

但是,如果你有很多具有相同纹理,亮度和颜色的立方体面,这是完全可能的,并且可以对你的性能产生巨大的影响。

我的引擎可能与您的引擎完全不同,它们将所有相同的面孔分隔成不同的arrays。 我的意思是,对于大块(32x128x32),所有立方体顶部的所有可见面都在它们自己的数组中,对于北面,西面和底面等也是相同的。由此,我可以很容易地将整个块传递给渲染阶段,或者我可以简单地跳过从玩家在东面的块传送所有西面。

考虑到这一点,join相邻的立方体面需要几乎相同的数据,如果你设置一个好的方法来保持你的数组sorting和正确地“遍布”arrays,完全有可能提高性能。 不管你是否想完成所有的工作,都要由你来决定。

我不认为任何人都可以回答这个问题,除了你以外,你应该这样做。 不知道你如何存储你的数据,你有多less时间甚至让你join面孔等情况。我不认为任何人都可以真正回答。

如果你想看看它,我建议去这里描述的着色器路线。 这就是我建议做实际join的方式。 然而,为了join他们,我提出了我在这篇文章末尾描述的方式。 这很容易,虽然不是100%最佳,但速度相当快。