Answers:
这将取决于游戏和用于块的索引结构。尽管在如此高的水平上,它不太可能与内存或特定的性能增强有很大关系。以可预测的方式调整块大小很可能是一个任意决定。它允许使用移位来进行一些计数和索引操作,而对于数字不是2的幂的数字,这是不可能的。
例如,以2的幂进行计数就像二进制移位一样容易:
Dec = Bin
1 = 000001
2 = 000010
4 = 000100
8 = 001000
16 = 010000
32 = 100000
这些快捷方式将在何处使用取决于开发人员以及他们要解决的问题。
如果您要决定制作块的大小,而在其他任何方面都没有关系,则最好使用熟悉的东西并从中受益。
首先,乘以2的幂比乘以任意数便宜得多,因为您可以通过移位来实现。大多数情况下,编译器可以为您执行此操作,因此,每当您在代码中写入“ * 16”时,编译器实际上就会进行四次移位,而您不必担心它-您只需要给通过这种方式设计数据结构,可以为编译人员提供机会。
其次,由于计算机中的高速缓存线,内存总线和其他信息通道也往往被设计为使用2的幂,因此以这种方式总体上可能会获得更好的性能。
第三,我们这些老怪胎只是习惯于玩二的幂,所以这是一个习惯。
(第四,其他设计硬件和编译器的老极客也喜欢2的幂,因此这不会很快改变)。
真正的答案是这样的:在二进制计算机上,2的幂是整数。
当普通人出于某种目的需要选择任意数字时,通常会在自己喜欢的数字系统中以10为底数选择不错的整数。因此,他们会选择10、100、1000等。简单易用,不需要太多的思考,准确的价值对他们并不真正重要,他们只是针对总体规模。
作为程序员,当我们出于某种目的需要选择任意数字时,通常会在系统计算机使用的数字(以2为底)中选择合适的整数。因此,我们将选择2、4、8等。因为它们很简单,并且容易,不需要太多的思考,精确的值对我们来说并不重要,我们只是针对总体规模。
其实没有什么比这更复杂的了。它们只是不错的整数。
另一个潜在的原因是,它将允许您对3D纹理中每个块的信息进行编码。如果您的目标硬件支持3D纹理,但不具有完全健壮的和一般的非二次幂纹理支持(我承认您希望对此进行较低的拍摄),那么使块大小为2的幂不是只是理想-这是必不可少的。
2^n
)